Время эпохи 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().
Ответы
Ответ 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) {
// ...
}
должен работать (и быть намного быстрее, чем синтаксис даты)