我想转换以下值,它是pig 中的一个字符数组
2016-05-11 23:59:57.628197
至
2016-05-11T23:59:57.628-05:00
我该怎么做?
以下是我尝试考虑的别名"a2"包含名为"input_date_value"列中chararray中的日期时间值列表
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',即所有日期的每次一月。
有人能帮忙吗。我做错了什么?
https://pig.apache.org/docs/r0.11.1/func.html#to-dateToDate占用SimpleDateFormat仅支持毫秒http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
您看到的-05:00是ToDate时区实际上被截断为3位数字,因为它只支持毫秒
在分析日期值时使用小写字符d而不是大写字母d。
现在,我已经设法自己在(In Pig 0.11)上修复了它
显然Pig0.11不支持我之前用于解析月份和日期的日期格式组件。
我发现以下推论暗示了上述的不相容性https://www.w3.org/TR/NOTE-datetime
用途:
'YYYY-MM-ddHH:MM:ss.SSSS'
而不是"YYYY-MM-DDHH:MM:ss.SSSSSSS"
现在它给出了正确的输出。
输入:
2001年-11-28 16:04:49.22388
输出:
2001年-11-28T16:04:49.223-05:00