120]

3lxsmp7m  于 2021-06-24  发布在  Pig
关注(0)|答案(1)|浏览(435)

上下文:从第三方数据源获取日期,如下所示。我正在使用pig脚本将此字符串转换为日期。
脚本:

a= LOAD '/user/hit_data.tsv' using PigStorage('\t');  
b= FOREACH a GENERATE $0 as post_t_time_info; 
c= FOREACH b GENERATE ToDate(post_t_time_info,'DD/MM/YYYY HH:mm:ss e ZZZ')

date对象采用的示例值:

17/6/2015 5:50:22 5 -120
17/6/2015 0:7:6 5 240

我不明白什么是-120/240。我尝试了时区(zzz)和毫秒(sss),但似乎不正确。
我目前使用的格式是'dd/mm/yyyy hh:mm:ss e x',其中x未知,并期待为它找到合适的模式。
谢谢!
参考文献:http://userguide.icu-project.org/formatparse/datetimehttp://www.unicode.org/reports/tr35/tr35-25.html#time_zone_fallback

rhfm7lfc

rhfm7lfc1#

很有可能 -120 以及 240 实际上是时区偏移。它们可能是以分钟为单位,而不是以小时为单位。然而,这并没有标准,所以它可以是格林尼治标准时间以东的分钟数,或者格林尼治标准时间以西的分钟数。
换句话说, -120 可以是 UTC+02:00 ,或 UTC-02:00 . 240 可以是 UTC+04:00 ,或 UTC-04:00 .
例如,如果它是从javascript Date 对象的 getTimezoneOffset 函数,符号将与您所期望的相反。它对西方有正面价值,而通常的iso8601公约对东方有正面价值。
因为你是那个获得数据的人,所以你比我们在确定数据来源和消除歧义方面处于更好的位置。如果是第三方提供的,查看他们的规格,或者联系他们询问。
另外-你说你在使用ApachePig,但是根据他们的文档 ToDate 函数使用java的 SimpleDateFormat -它不使用与icu相同的格式限定符,也没有以分钟为单位识别时区偏移的格式限定符。您可能需要编写自己的函数,而不是只使用内置函数 ToDate .

相关问题