如何在 pig latin 中以毫秒为单位将 chararray 转换为 datetime

How to convert chararray to datetime with milliseconds in pig latin

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

2016-05-11 23:59:57.628197

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

我该怎么做?

以下是我尝试考虑的别名 'a2' 在名为 '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',即所有日期每次都是一月。

谁能帮忙。我做错了什么?

https://pig.apache.org/docs/r0.11.1/func.html#to-date ToDate takes SimpleDateFormat only supports milliseconds http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

您看到的 -05:00 是时区 ToDate 实际上被截断为 3 位数,因为它仅支持毫秒

使用小写字母 d 而不是大写字母 D 来解析日期值。

现在,我已经设法自己修复了(在 Pig 0.11 中)

显然 Pig 0.11 不支持我之前用于解析月份和日期的日期格式组件。

我发现下面的推论暗示了所提到的不兼容性 https://www.w3.org/TR/NOTE-datetime

Use:

'YYYY-MM-dd HH:mm:ss.SSSSSS'

而不是'YYYY-MM-DD HH:mm:ss.SSSSSS'

它现在提供正确的输出。

Input:

2001-11-28 16:04:49.22388

Output:

2001-11-28T16:04:49.223-05:00