Анализ строки времени с отметкой часового пояса в 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 явно.