1

「2013-02-02T04:04:11.240-4:00」などのタイムスタンプ値を持つ文字列があります。

したがって、目標は 2013-02-02 04:04:11 のようなタイムスタンプ形式に変換することです。これどうやってするの。

このコマンドは正常に動作します

from_unixtime(unix_timestamp(substr('20130502081559999',1,14), 'yyyyMMddHHmmss'))

しかし、このようなことをしようとすると、「T」でエラーが発生します

from_unixtime(unix_timestamp(substr('2013-05-02T08:15:59.999-4:00',1,19), 'yyyy-MM-ddTHH:mm:ss')))

4

1 に答える 1

5

タイム ゾーン オフセットを除く文字列内のすべてに対して、次のパターンが機能します。

from_unixtime(unix_timestamp("2013-02-02T04:04:11.240", "yyyy-MM-dd'T'HH:mm:ss.SSS"))

SimpleDateFormat のパターンはこちらです。

追加のパターン XXX は、タイム ゾーン オフセットを処理する必要があります。しかし、このページこのページで説明したように、X パターンは Java 7 で導入されました。

以前のバージョンの Java を実行している場合 (私のように - 私の Cloudera QuickStart VM は 1.6.0_32 を使用しています)、これを機能させるには追加の操作を行う必要があります。これを行う1つの方法は次のとおりです。

from_unixtime(unix_timestamp( 
    regexp_replace(
        regexp_replace("2013-02-02T04:04:11.240-4:00", "(.*):(.{2})$", "$1$2"),
    "(.*)-(.{3})$", "$1-0$2"), 
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"))

最も内側の regexp_replace は、タイム ゾーン オフセットからコロン (:) を取り除きます。最も外側の regexp_replace は、必要に応じて、タイム ゾーン オフセットを余分なゼロで埋めます (つまり、-4:00 は、Z パターンに一致する -0400 になります。-400 は Z パターンに一致しないことに注意してください)。

于 2014-01-18T05:04:58.217 に答える