Время эпохи Unix к объекту Java Date - PullRequest
70 голосов
/ 11 февраля 2009

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

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

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

Ответы [ 7 ]

104 голосов
/ 11 февраля 2009

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

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

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

Date expiry = new Date(Long.parseLong(date) * 1000);
35 голосов
/ 11 февраля 2009

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

Итак:

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

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

18 голосов
/ 24 декабря 2015

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 used по Java.

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

ZoneId zoneId = ZoneId.of( "America/Montreal" );
6 голосов
/ 11 февраля 2009
long timestamp = Long.parseLong(date)
Date expiry = new Date(timestamp * 1000)
0 голосов
/ 26 марта 2015

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

long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)

0 голосов
/ 11 февраля 2009

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

0 голосов
/ 11 февраля 2009

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

System.currentTimeMillis()

Итак, написание

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

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

...