Эти две строки - 2020-03-30T07:37:02.282+01:00
и 2020-03-30T05:44:02.397Z
- имеют одинаковый формат. Формат ISO 8601 (см. Ссылку внизу). В ISO 8601 смещение от UT C (или GMT) может быть задано либо Z
для нуля, либо, например, +01:00
для 1 часа 0 минут (существует больше вариантов).
Вам следует предпочитайте использовать java .time, современный Java API даты и времени, для вашей работы с датой и временем. Также java.time.OffsetDateTime
анализирует ISO 8601 как значение по умолчанию, то есть без какого-либо явного средства форматирования. Поэтому нам не нужно думать о строке шаблона формата. В Java:
OffsetDateTime dateTime
= OffsetDateTime.parse("2020-03-30T07:37:02.282+01:00");
System.out.println(dateTime);
dateTime = OffsetDateTime.parse("2020-03-30T05:44:02.397Z");
System.out.println(dateTime);
Вывод:
2020-03-30T07:37:02.282+01:00
2020-03-30T05:44:02.397Z
Вы заметили, что OffsetDateTime.toString()
(неявно вызывается при печати объекта) возвращает ISO 8601 форматировать тоже.
Даже если нам нужно было написать строку шаблона форматирования для форматера, вы должны никогда жесткий код Z
как литерал (заключив его в одинарные кавычки). Как я уже сказал, Z
- это смещение от UT C, и его нужно анализировать как таковое, иначе вы не сможете проанализировать строку, или, что еще хуже, вы рискуете получить неверные результаты от этого. По всей вероятности, вы получили неправильный результат, когда сказали, что можете анализировать 2020-03-30T05:44:02.397Z
.
Ссылки