如何在 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
我想转换以下值,它是 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