Unix Epoch Time to Java Date Object
Вопрос
У меня есть строка, содержащая Unix Epoch Time, и мне нужно преобразовать его в объект даты Java.
String date = "1081157732";
DateFormat df = new SimpleDateFormat(""); // This line
try {
Date expiry = df.parse(date);
} catch (ParseException ex) {
ex.getStackTrace();
}
Отмеченная линия - это место, где у меня проблемы. Я не могу понять, каким должен быть аргумент в simpledateformat (), или даже если я должен использовать SimpleDateFormat ().
Решение
Как насчет просто:
Date expiry = new Date(Long.parseLong(date));
РЕДАКТИРОВАТЬ: Согласно RDE6173Ответ и более подробно рассмотрим вход, указанный в вопросе, «1081157732», по-видимому, составляет секундное значение эпохи, поэтому вы захотите размножить долгие из Parselong () на 1000, чтобы преобразовать в миллисекунд, который Что использует конструктор даты Java, так что:
Date expiry = new Date(Long.parseLong(date) * 1000);
Другие советы
Эпоха - это количество секунды С 1 января 1970 года ..
Так:
String epochString = "1081157732";
long epoch = Long.parseLong( epochString );
Date expiry = new Date( epoch * 1000 );
Чтобы получить больше информации:http://www.epochconverter.com/
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 в Unix Time используется Java.
ZoneOffset
Содержит удобную константу для часового пояса UTC, как видно в последней строке выше. Его суперкласс, ZoneId
можно использовать для адаптации в другие часовые пояса.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
long timestamp = Long.parseLong(date)
Date expiry = new Date(timestamp * 1000)
Еще лучше, используйте Jodatime. Анкет Гораздо проще разрабатывать строки в струны. Также безопасно. Стоит времени, которое вам понадобится для его реализации.
Чтобы преобразовать секунду марки времени в Millisecond Time Stamp. Вы можете использовать API TimeUnit и аккуратный.
long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)
Гул .... если я не ошибаюсь, время эпоха Unix на самом деле то же самое, что и
System.currentTimeMillis()
Так писать
try {
Date expiry = new Date(Long.parseLong(date));
}
catch(NumberFormatException e) {
// ...
}
Должен работать (и быть намного быстрее, эта дата анализа)