Анализ строки времени с отметкой часового пояса в 3-значном формате с последующим "Z"

В инфраструктуре Hadoop (на основе Java) я получаю метки времени в виде строковых значений в этом формате:

2015-10-01T04:22:38:208Z
2015-10-01T04:23:35:471Z
2015-10-01T04:24:33:422Z

Я пробовал разные шаблоны, следуя примерам для Java-класса SimpleDateFormat, но безуспешно.

Заменили 'T' на '' и 'Z' на '', затем

"yyyy-MM-dd HH:mm:ss:ZZZ"
"yyyy-MM-dd HH:mm:ss:zzz"
"yyyy-MM-dd HH:mm:ss:Z"
"yyyy-MM-dd HH:mm:ss:z"

Без замены,

"yyyy-MM-dd'T'HH:mm:ss:zzz'Z'"

Фактически, этот формат не указан среди примеров. Что мне с этим делать? Может быть, эти 3 цифры - это миллисекунды, а время указано в UTC, например: "гггг-мм-дд'т'хч: мм: сс.сссс"? Но он все равно должен выглядеть как "2015-11-27T10:50:44.000-08:00" как стандартизированный формат ISO-8601.

Может быть, этот формат не анализируется правильно в первую очередь?

Я использую Ruby, Python, Pig, Hive для работы с ним (но не Java напрямую), так что любой пример помогает. Спасибо!

1 ответ

Решение

Я очень сильно подозреваю, что последние три цифры не имеют ничего общего с часовыми поясами, а вместо этого - миллисекунды, и да, Z означает UTC. Это немного странно, что они используют : вместо . в качестве разделителя между секундами и миллисекундами, но это может иногда случаться.

В таком случае вы хотите

"yyyy-MM-dd'T'HH:mm:ss:SSSX"

... или использовать

"yyyy-MM-dd'T'HH:mm:ss:SSS'Z'"

и установите свой SimpleDateFormatЧасовой пояс в UTC явно.

Другие вопросы по тегам