我希望转换下面的值,这是猪的chararray
2016-05-11 23:59:57.628197
到
2016-05-11T23:59:57.628-05:00
我该怎么做?
以下是我尝试考虑别名' a2'包含chararray中名为' input_date_value'的列中的日期时间值列表。
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'即所有日期的每一月一次。
有人可以提供帮助。我做错了什么?
答案 0 :(得分:1)
https://pig.apache.org/docs/r0.11.1/func.html#to-date ToDate采用SimpleDateFormat仅支持毫秒http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
你看到-05:00是时区ToDate实际上是截断为3位数,因为它只支持毫秒
答案 1 :(得分:0)
使用小写字符d代替大写字母D来解析日期值。
现在,我已经设法自己解决(In Pig 0.11)
显然Pig 0.11不支持我之前用于解析月份和日期的日期格式组件。
我发现以下推断提示了https://www.w3.org/TR/NOTE-datetime
所提及的不兼容性使用:
' YYYY-MM- dd HH:mm:ss.SSSSSS'
代替' YYYY-MM- DD HH:mm:ss.SSSSSS'
现在提供正确的输出。
输入:
2001- 11 -28 16:04:49.22388
输出:
2001- <强> 11 强> -28T16:04:49.223-05:00