我想转换以下值,这是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',即所有日期的一月。
有人能帮忙吗。我做错什么了?
2条答案
按热度按时间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
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位数字,因为它只支持毫秒