hive:如何转换毫秒时间戳?

iszxjhcz  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(1469)

我在试着用 HIVE UDFs (https://cwiki.apache.org/confluence/display/hive/languagemanual+udf#languagemanualudf-日期函数)从 Sparklyr 正确读入一些时间戳。
很遗憾,我无法正确解析以下时间戳:

unix_timestamp('2011-03-01T00:00:04.226Z', 'yyyy-MM-ddThh:mm:ss.SSS' )

退货 NA s、 是的。。
有什么想法吗?这里的正确模式是什么?谢谢!

eqqqjvef

eqqqjvef1#

你需要引用 T 以及 Z ```
hive> select unix_timestamp('2011-03-01T00:00:04.226Z', "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'" );
OK
1298959204

如果你不怕笨手笨脚的话,不妨试试这个:

select unix_timestamp(cast(regexp_replace('2011-03-01T00:00:04.226Z', '(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).(\d{3})Z', '$1-$2-$3 $4:$5:$6.$7' ) as timestamp))

转换 `EST` 至 `UTC` ,使用以下命令:

hive> select to_utc_timestamp(unix_timestamp('2011-03-01T00:00:04.226Z', "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'" )*1000, 'EST');
OK
2011-03-01 05:00:04

乘 `1000` 是必需的,因为从配置单元语言手册:
分数值被视为秒。整数值被视为毫秒。。e、 g到utc时间戳(2592000.0,'pst')、到utc时间戳(2592000000,'pst')和到utc时间戳(时间戳'1970-01-30 16:00:00','pst')都返回时间戳1970-01-31 00:00:00

相关问题