What is this date format? 2011-08-12T20:17:46.384Z
Что это за формат даты? 2011-08-12T20:17:46.384Z
У меня есть следующая дата: 2011-08-12T20:17:46.384Z. Что это за формат? Я пытаюсь разобрать его с помощью Java 1.4 через DateFormat.getDateInstance().parse(dateStr) и я получаю
java.text.ParseException: Не подлежащая замене дата: "2011-08-12T20:17:46.384Z"
Я думаю, мне следует использовать SimpleDateFormat для синтаксического анализа, но сначала я должен знать строку формата. Все, что у меня есть для этого на данный момент, это yyyy-MM-dd, потому что я не знаю, что T означает в этой строке - что-то, связанное с часовым поясом? Эта строка даты берется из lcmis:downloadedOn тега, показанного в файлах CMIS типа носителя истории загрузок.
Переведено автоматически
Ответ 1
Буква T - это просто литерал, отделяющий дату от времени, а Z означает "смещение нулевого часа", также известное как "время зулу" (UTC). Если в ваших строках всегда есть буква "Z", вы можете использовать:
В вашей строке ввода используется стандартный формат ISO 8601.
Instant.parse ( "2011-08-12T20:17:46.384Z" )
ISO 8601
Этот формат определен разумным практическим стандартом, ISO 8601.
T отделяет часть даты от части времени суток. Z В конце означает UTC (то есть смещение от UTC в ноль часов-минут-секунд). ZПроизносится как “зулусский”.
java.time
Старые классы даты и времени, поставляемые в комплекте с самыми ранними версиями Java, оказались плохо спроектированными, запутанными и доставляющими хлопоты. Избегайте их.
Вместо этого используйте фреймворк java.time, встроенный в Java 8 и более поздние версии. Классы java.time заменяют как старые классы даты и времени, так и весьма успешную библиотеку Joda-Time.
Классы java.time используют ISO 8601 по умолчанию при синтаксическом анализе / генерации текстовых представлений значений даты и времени.
Instant Класс представляет момент на временной шкале в UTC с разрешением в наносекунды. Этот класс может напрямую анализировать вашу входную строку, не утруждая себя определением шаблона форматирования.
Вы можете обмениваться объектами java.time непосредственно со своей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.* классах. Поддержка Hibernate 5 и JPA 2.2 java.time.
Существуют другие способы его анализа, а не первый ответ. Для его анализа:
(1) Если вы хотите получить информацию о дате и времени, вы можете проанализировать ее в ZonedDatetime(начиная с Java 8) или Date(старом) объекте:
// ZonedDateTime's default format requires a zone ID(like [Australia/Sydney]) in the end. // Here, we provide a format which can parse the string correctly. DateTimeFormatterdtf= DateTimeFormatter.ISO_DATE_TIME; ZonedDateTimezdt= ZonedDateTime.parse("2011-08-12T20:17:46.384Z", dtf);
или
// 'T' is a literal. // 'X' is ISO Zone Offset[like +01, -08]; For UTC, it is interpreted as 'Z'(Zero) literal. Stringpattern="yyyy-MM-dd'T'HH:mm:ss.SSSX";
// since no built-in format, we provides pattern directly. DateFormatdf=newSimpleDateFormat(pattern);
DatemyDate= df.parse("2011-08-12T20:17:46.384Z");
(2) Если вас не волнуют дата и время и вы просто хотите рассматривать информацию как момент в наносекундах, то вы можете использовать Instant:
// The ISO format without zone ID is Instant's default. // There is no need to pass any format. Instantins= Instant.parse("2011-08-12T20:17:46.384Z");