【问题标题】:How to convert chararray to datetime with milliseconds in pig latin如何在猪拉丁语中以毫秒将 chararray 转换为 datetime
【发布时间】:2016-05-17 08:49:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: datetime apache-pig to-date latin


    【解决方案1】:

    https://pig.apache.org/docs/r0.11.1/func.html#to-dateToDate 采用 SimpleDateFormat 只支持毫秒http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

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

    【讨论】:

    • 感谢您的回答 Vikas。你误解了我朋友的问题。我知道它会将毫秒截断为仅三位数字。问题在于从 chararray 解析月份值并将其生成为仅特定月份的日期时间。您现在可以重新访问并提供答案吗?
    • 知道了,我认为这与 ToDate 中的解析有关,让我检查并更新
    • 看起来像一个错误,无论你通过什么月份它都显示为 1 我拥有的是猪 .012 版本 你拥有的是什么版本?
    • 我使用的是 Pig 0.11
    【解决方案2】:

    使用小写字母 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多