Преобразование даты iso8601 в метку времени unix в java
у меня есть строка даты
String s = "2014-09-01T19:22:43.000Z";
Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").parse(s);
но я получаю исключение:
Exception in thread "main" java.text.ParseException: Unparseable date: "2014-09-01T19:22:43.000Z"
Как преобразовать вышеуказанную строку в метку времени unix? Спасибо
2 ответов
X
используется ISO 8601 time zone
на SimpleDateFormat
, а не Z
правильный формат "yyyy-MM-dd'T'HH:mm:ss.SSSX"
tl; dr
как преобразовать вышеуказанную строку в метку времени unix?
Instant.parse( "2014-09-01T19:22:43.000Z" )
.getEpochSecond()
java.время
на java.time.Instant
класс может анализировать входную строку в стандартном формате ISO 8601. Нет необходимости указывать шаблон форматирования.
Instant instant = Instant.parse( "2014-09-01T19:22:43.000Z" );
чтобы получить количество миллисекунд с эпохи 1970 года:
long millisecondsSinceUnixEpoch = instant.toEpochMilli() ;
для целых секунд с эпохи 1970-01-01T00:00:00Z:
long secondsSinceUnixEpoch = instant.getEpochSecond() ;
будет в курсе возможна потеря данных при переходе на миллисекунды или целые секунды. Ява.классы времени имеют разрешение наносекунды, поэтому любые микросекунды или наносекунды, присутствующие в значении, будут усечены.
Joda Времени
обновление проект Joda-Time теперь находится в режиме обслуживания. Команда советует перейти на java.классы время.
библиотека Joda-Time упрощает эту работу. Ваш ISO 8601 уступчивый строка может быть подана непосредственно конструктору Joda-Time. Встроенный парсер ожидает ISO 8601.
DateTime dateTime = new DateTime( "2014-09-01T19:22:43.000Z" ) ;
Метка Времени Unix
что вы подразумеваете под меткой времени Unix? Некоторые люди имеют в виду количество целых секунд с первого момента 1970 UTC (Unix эпохи), игнорируя прыжковые секунды (см. Время Unix). Некоторые люди имеют в виду количество миллисекунд или иного решения.
Примечание использование long
примитивные, а не более распространенные int
.
за миллисекунды звоните getMillis()
.
long millisecondsSinceUnixEpoch = dateTime.getMillis();
в течение целых секунд делите на 1000. Рассмотрим, требуется ли округление или усечение дробных секунд.
обычно я бы предложил передать объект DateTimeZone вместе с вашей строкой конструктору DateTime. Но нет необходимости, если все, что вы хотите, это граф с эпохи.
о java.время
на java.время framework встроен в Java 8 и более поздние версии. Эти классы вытесняют беспокойных старых наследие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
на Joda Времени, теперь режим обслуживания, советует миграцию в java.время занятия.
чтобы узнать больше, см. В Oracle Учебник. И search Stack Overflow для многих примеров и объяснений. Спецификация JSR 310.
где получить java.время занятий?
-
Java SE 8, Java SE 9, и позже
- встроенный.
- часть стандартного API Java с комплексная реализация.
- Java 9 добавляет некоторые незначительные функции и исправления.
-
Java SE 6 и Java SE 7
- большая часть java.функциональность времени обратно портирована на Java 6 & 7 в ThreeTen-Backport.
-
Android
- более поздние версии Android bundle реализации java.классы время.
- для более раннего Android,ThreeTenABP проект приспосабливается ThreeTen-Backport (упоминалось выше). См.как использовать ThreeTenABP....
на ThreeTen-Extra проект расширяет java.время с дополнительными занятиями. Этот проект является испытательной площадкой для возможных будущих дополнений к java.время. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и больше.