Подтвердить что ты не робот

Время эпохи Unix для объекта Java Date

У меня есть строка, содержащая UNIX Epoch time, и мне нужно преобразовать ее в объект Java Date.

String date = "1081157732";
DateFormat df = new SimpleDateFormat(""); // This line
try {
  Date expiry = df.parse(date);
 } catch (ParseException ex) {
  ex.getStackTrace();
}

Отмеченная строка - это то, где у меня проблемы. Я не могу понять, что должен аргумент SimpleDateFormat(), или даже если я должен использовать SimpleDateFormat().

4b9b3361

Ответ 1

Как насчет просто:

Date expiry = new Date(Long.parseLong(date));

РЕДАКТИРОВАТЬ: согласно rde6173 ответьте и более внимательно посмотрите на вход, указанный в вопросе, "1081157732" представляется значением эпохи в секундах поэтому вы хотите умножить длительность с parseLong() на 1000 для преобразования в миллисекунды, что и использует конструктор Java Date, поэтому:

Date expiry = new Date(Long.parseLong(date) * 1000);

Ответ 2

Эпоха - это число секунд с 1 января 1970 года.

Итак:

String epochString = "1081157732";
long epoch = Long.parseLong( epochString );
Date expiry = new Date( epoch * 1000 );

Для получения дополнительной информации: http://www.epochconverter.com/

Ответ 3

java.time

Используя java.time, встроенную в Java 8 и более позднюю версию.

import java.time.LocalDateTime;
import java.time.Instant;
import java.time.ZoneId;

long epoch = Long.parseLong("1081157732");
Instant instant = Instant.ofEpochSecond(epoch);
ZonedDateTime.ofInstant(instant, ZoneOffset.UTC); # ZonedDateTime = 2004-04-05T09:35:32Z[UTC]

В этом случае вам лучше использовать ZonedDateTime, чтобы отметить его как дату в UTC, потому что Epoch определен в UTC в Unix time, используемом Java.

ZoneOffset содержит удобную константу для часовой пояс UTC, как показано в последней строке выше. Его суперкласс ZoneId можно использовать для настройки в другие часовые пояса.

ZoneId zoneId = ZoneId.of( "America/Montreal" );

Ответ 4

long timestamp = Long.parseLong(date)
Date expiry = new Date(timestamp * 1000)

Ответ 5

Еще лучше, используйте JodaTime. Гораздо проще разбирать строки и строки. Также безопасен поток. Стоит, когда вам понадобится выполнить его.

Ответ 6

Чтобы преобразовать метку времени секунд в метку времени в миллисекундах. Вы можете использовать API TimeUnit и аккуратно использовать это.

long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)

Ответ 7

Хм.... если я не ошибаюсь, время эпохи UNIX на самом деле то же самое, что

System.currentTimeMillis()

Итак, пишу

try {
    Date expiry = new Date(Long.parseLong(date));
}
catch(NumberFormatException e) {
    // ...
}

должен работать (и быть намного быстрее, чем синтаксис даты)