У меня есть строка, содержащая время UNIX Epoch , и мне нужно преобразовать ее в объект Java Date.
String date = "1081157732";
DateFormat df = new SimpleDateFormat(""); // This line
try {
Date expiry = df.parse(date);
} catch (ParseException ex) {
ex.getStackTrace();
}
Отмеченная линия - это то место, где у меня проблема. Я не могу понять, каким должен быть аргумент SimpleDateFormat (), и даже если я должен использовать SimpleDateFormat ().
private String getDateString(long timeInMilliseconds) { SimpleDateFormat formatter = new SimpleDateFormat("EEE, d MMM yyyy 'at' HH:mm:ss z"); return formatter.format(timeInMilliseconds); }
Ответы:
Как насчет только:
Date expiry = new Date(Long.parseLong(date));
РЕДАКТИРОВАТЬ: в соответствии с ответом rde6173 и более пристальным взглядом на ввод, указанный в вопросе, «1081157732», по-видимому, представляет собой значение эпохи на основе секунд, поэтому вы хотите умножить long из parseLong () на 1000, чтобы преобразовать в миллисекунды, что и использует конструктор Date в Java, поэтому:
Date expiry = new Date(Long.parseLong(date) * 1000);
источник
java.util.Date
,java.util.Calendar
иjava.text.SimpleDateFormat
, теперь унаследованы , вытеснены классами java.time, встроенными в Java 8 и новее. См. Учебник Oracle .Эпоха - это количество секунд с 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, потому что Epoch определяется в UTC во времени Unix, используемом Java.ZoneOffset
содержит удобную константу для часового пояса UTC, как показано в последней строке выше. Его суперклассZoneId
можно использовать для адаптации к другим часовым поясам.ZoneId zoneId = ZoneId.of( "America/Montreal" );
источник
LocalDateTime
и просто показатьZonedDateTime
. В большинстве бизнес-приложенийZonedDateTime
это лучший способ. Люди склонны ввязываться в проблемы / путаницу сLocalXXX
типами.long timestamp = Long.parseLong(date) Date expiry = new Date(timestamp * 1000)
источник
А еще лучше использовать JodaTime . Намного проще анализировать строки и разбивать их на строки. Также является потокобезопасным. Стоит потратить время на его реализацию.
источник
Чтобы преобразовать отметку времени секунд в отметку времени миллисекунды. Вы можете использовать API TimeUnit и вот так аккуратно.
long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)
источник
Хм .... если я не ошибаюсь, время UNIX Epoch на самом деле то же самое, что
Так пишу
try { Date expiry = new Date(Long.parseLong(date)); } catch(NumberFormatException e) { // ... }
должен работать (и быть намного быстрее, чем синтаксический анализ даты)
источник