0

我希望将以下值转换为猪中的字符数组

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',即所有日期每次都是一月。

有人可以帮忙吗。我究竟做错了什么 ?

4

2 回答 2

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 位数,因为它仅支持毫秒

于 2016-05-17T09:35:27.060 回答
0

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

现在,我已经设法自己修复它(在 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

于 2016-05-18T12:13:07.440 回答