Нет, не в порядке
Нет, Z
является смещением от UTC, поэтому его не следует избыточно комбинировать с числовым смещением +00:00
или +0000
.
ИСО 8601
Хотя у меня нет доступа к платной копии спецификации ISO 8601, страница Википедии четко указывает, что Z
должно соответствовать времени суток:
…добавьте Z сразу после времени без пробела.
IETF RFC 3339
Свободно доступный RFC 3339, профиль ISO 8601, определяет Z
как прикрепленный к время суток:
Суффикс … применяется ко времени …
RFC также указывает с формальной нотацию ABNF, что мы должны использовать < em>либо Z
, либо число. В ABNF косая черта (SOLIDUS) означает «или» (исключающее «или»), а пара квадратных скобок означает «необязательно».
time-numoffset = (+/-) время-час [[:] время-минута]
часовой пояс = Z / time-numoffset
Кроме того, раздел 5.4 спецификации конкретно рекомендует против включая избыточную информацию.
Джава
Современные классы java.time, встроенные в Java, используют стандарт ISO 8601. форматы по умолчанию при разборе/генерации строк. См. учебник по Oracle.
Парсинг ввода текста
С Z
:
Instant instant = Instant.parse( "2019-01-23T12:34:56.123456789Z" ) ;
С +00:00
:
OffsetDateTime odt = OffsetDateTime.parse( "2019-01-23T12:34:56.123456789+00:00" ) ;
Генерация текстового вывода
Чтобы создать строку с Z
, просто вызовите Instant::toString
.
String output = Instant.now().toString() ; // Capture the current moment in UTC, then generate text representing that value in standard ISO 8601 using the `Z` offset-indicator.
2019-05-22T21:00:52.214709Z
Чтобы создать строку с 00:00
, вызовите OffsetDateTime::format
. Сгенерируйте текст, используя DateTimeFormatter
с заданным шаблоном форматирования.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSxxx" ) ;
String output = OffsetDateTime.now( ZoneOffset.UTC ).format( f ) ;
2019-05-22T21:00:52.319076+00:00
Усечение
Вы можете обрезать любые микросекунды или наносекунды.
Instant
.now()
.truncatedTo( ChronoUnit.MILLIS )
.toString()
2019-05-22T21:11:28.970Z
…и…
OffsetDateTime
.now( ZoneOffset.UTC )
.truncatedTo( ChronoUnit.MILLIS )
.format(
DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSxxx" )
)
2019-05-22T21:11:29.078+00:00
Посмотрите этот код, работающий в реальном времени на IdeOne.com.
person
Basil Bourque
schedule
08.03.2016