Я пытаюсь преобразовать строку ISO 8601 в согласованный формат, чтобы можно было сортировать и искать с использованием простого лексикографического порядка.Преобразование ISO 8601 Дата в стандартный строковый формат
Моего приложение может получить дату/время, в любом из следующих форматов, например:
2015-02-05T02:05:17.000+00:00
2015-02-05T02:05:17+00:00
2015-02-05T02:05:17Z
Все они представляют собой то же дату/время, и я хотел бы, чтобы преобразовать их все в каноническую форму хранения, говорят:
2015-02-05T02:05:17.000Z
Моя первая мысль была просто разобрать их, используя технику из Converting ISO 8601-compliant String to java.util.Date, а затем преобразовать обратно в нужной строке, но это ломается при работе с менее точной даты/времени, например:
2015-02-05T02:05:17Z
2015-02-05T02:05Z
2015-02-05Z
2015-02Z
2015Z
Неточность этих времен должна быть сохранена. Они не должны быть преобразованы в:
2015-02-05T00:00:00.000Z
Я смотрел Java 8 и Joda время, но они, кажется, хотят, чтобы рассматривать все, как определенные моменты времени, и не могут моделировать неточность или частичные даты/раз.
UPDATE:
Использование Java 8, я могу сделать:
OffsetDateTime dateTime = OffsetDateTime.parse("2015-02-05T02:05:17+00:00");
System.out.println(dateTime.toString());
, который дает мне:
2015-02-05T02:05:17Z
чего я хочу, но:
OffsetDateTime dateTime = OffsetDateTime.parse("2015-02-05T02:05:17.000+00:00");
System.out.println(dateTime.toString());
также дает мне:
2015-02-05T02:05:17Z
Обратите внимание, что java выбрасывает миллисекундную точность. Указание 000 обрабатывается так же, как не указывая ничего, что не кажется совершенно правильным.
'2015-02-05T02: 05: 17 + 0000' не является действительной датой ISO. –
Википедия предполагает, что +0000 является допустимым смещением. У вас есть лучшая ссылка? –
Я не думаю, что есть один объект, который может содержать дату с ограничениями, которые вы определили (то есть частичная точность). Поэтому лучше всего использовать свое собственное представление. – eckes