上下文:从第三方数据源获取日期,如下所示。我正在使用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
1条答案
按热度按时间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
.