如何用pig拉丁语将chararray转换为带有毫秒的datetime

at0kjp5o  于 2021-06-21  发布在  Pig
关注(0)|答案(2)|浏览(375)

我想转换以下值,这是pig中的一个字符

2016-05-11 23:59:57.628197

2016-05-11T23:59:57.628-05:00

我该怎么做?
以下是我尝试考虑的别名“a2”在名为“input\u date\u value”的列中包含字符形式的datetime值列表

FOREACH a2 GENERATE input_date_value AS input_date:chararray,
                       ToDate(input_date_value,'YYYY-MM-DD HH:mm:ss.SSSSSS') AS modification_datetime:datetime;

用于输入-

2002-07-11 16:58:40.249764

输出为-

2002-01-11T16:58:40.249-05:00

像'07'这样的月份值不会被提取,创建的时间戳将月份设置为01',即所有日期的一月。
有人能帮忙吗。我做错什么了?

toiithl6

toiithl61#

使用小写字符d而不是大写字符d来解析日期值。
现在,我已经设法把它自己(Pig0.11)
显然,pig0.11不支持我之前用于解析月份和日期的日期格式组件。
我发现下面的推论暗示了前面提到的不相容性https://www.w3.org/tr/note-datetime
用途:
'yyyy-mm-dd hh:mm:ss.ssss'
而不是“yyyy-mm-dd hh:mm:ss.ssss”
它现在给出正确的输出。
输入:
2001-11-28 16:04:49.22388
输出:
2001年11月28日16:04:49.223-05:00

y0u0uwnf

y0u0uwnf2#

https://pig.apache.org/docs/r0.11.1/func.html#to-date todate takes simpledateformat仅支持毫秒http://docs.oracle.com/javase/6/docs/api/java/text/simpledateformat.html
您看到的-05:00是todate的时区,它实际上被截断为3位数字,因为它只支持毫秒

相关问题