0

В инфраструктуре Hadoop (Java-основе) Я получаю временные метки как строковые значения в этом формате:Синтаксический строка с отметкой времени с указанием временной зоны в формате 3-значным с последующим «Z»

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

я попробовал разные скороговорки после examples для класса 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, например: "yyyy-MM-dd'T'HH: mm: ss.SSSZ"? Но это все равно должно выглядеть как «2015-11-27T10: 50: 44.000-08: 00» в стандартном формате ISO-8601.

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

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

ответ

2

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

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

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

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

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

и установить часовой пояс ваши SimpleDateFormat «ы к UTC явно.

+0

Спасибо, Джон, очень ценю ваш быстрый ответ. Кто-нибудь другой разделяет мнение Джона? – mel

+1

Да, я согласен с Джоном. Это, конечно, не часовой пояс. Вероятнее всего, миллисекунды. ':' неверно, оно должно быть '.' или ',' по спецификации ISO8601. –