如何在猪拉丁语中将chararray转换为日期时间,以毫秒为单位

时间:2016-05-17 08:49:30

标签: datetime apache-pig to-date latin

我希望转换下面的值,这是猪的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'即所有日期的每一月一次。

有人可以提供帮助。我做错了什么?

2 个答案:

答案 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