上下文:从第三方数据源获取日期,如下所示。我正在使用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')
日期对象采用的示例值:
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/datetime http://www.unicode.org/reports/tr35/tr35-25.html#Time_Zone_Fallback
答案 0 :(得分:2)
-120
和240
确实是时区偏移。它们可能是分钟而不是小时。但是,没有标准,因此可能是GMT的分钟东,或GMT的分钟 west 。
换句话说,-120
可以是UTC+02:00
或UTC-02:00
。 240
可以是UTC+04:00
,也可以是UTC-04:00
。
例如,如果它是从JavaScript Date
对象的getTimezoneOffset
函数中获取的,那么该符号将与您的预期相反。它对 west 有正值,而通常的ISO8601约定对 east 有正值。
由于您是获取数据的人,因此您处于比我们更好的位置来识别源并消除歧义。如果是来自第三方,请查看其规格,或与他们联系并询问。
另外 - 你说你使用的是Apache Pig,但根据their documentation,ToDate
函数使用Java SimpleDateFormat
- 它不使用相同的格式限定符ICU,它也没有格式限定符来识别时区偏移量。您可能需要编写自己的函数,而不是仅使用内置的ToDate
。