对无效时区使用todate()

o4tp2gmn  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(244)

我正在使用pig脚本尝试使用todate()将字符串转换为datetime对象。下面是我正在使用的一个示例字符串 Fri Nov 01 12:30:19 EDT 2013 当我尝试使用todate(userstring,format)将其转换为datetime对象时,我被告知使用的格式无效。。。

B = FOREACH A GENERATE ToDate(date,'EEE MMM dd HH:mm:ss z yyyy') AS datetime;
ERROR org.apache.pig.tools.grunt.GruntParser - ERROR 2999: Unexpected internal error. Invalid format: "Fri Nov 01 12:30:19 EDT 2013" is malformed at "EDT 2013"

我强烈怀疑,原因是pig使用joda时间,而edt不是有效的joda时区。没问题,根据文档,pig使用简单的日期格式,我可以转义字符串(参见第一个示例)。但我似乎不能这么做。。。

ToDate(date,"EEE MMM dd HH:mm:ss 'EDT' yyyy") <-- unexpected character '"'
ToDate(date,'"EEE MMM dd HH:mm:ss 'EDT' yyyy"') <-- expecting semicolon error
ToDate(date,'EEE MMM dd HH:mm:ss 'EDT' yyyy') <-- expecting semicolon
ToDate(date,'EEE MMM dd HH:mm:ss \'EDT\' yyyy') <--  malformed at " EDT 2013"
ToDate(date,'EEE MMM dd HH:mm:ss "EDT" yyyy') <--  Illegal pattern component: T

等等,我很肯定我尝试过引用和转义字符的每一个组合,试图让Pig忽略“edt”字符,但似乎没有任何效果(以上大部分只是在黑暗中拍摄)。
在我打开一个bug报告或是关于这个的东西之前,我有两个问题。1) 因为edt不是受支持的时区,所以这个失败是正确的吗?或者我的模式哪里错了?2) 如果因为edt而失败了,有没有办法摆脱这些角色,或者我在这一步做错了什么?

yc0p9oo0

yc0p9oo01#

你不能用joda解析edt,你可以用jdk。edt不明确,可以有不同的值。
您应该对stackoverflow模式的另一个问题感兴趣,以便将这个字符串解析为datetime

相关问题