1

我正在使用 Pig 脚本,尝试使用 ToDate() 将字符串转换为日期时间对象。这是我正在使用的示例字符串Fri Nov 01 12:30:19 EDT 2013

当我尝试使用ToDate(userstring, format)将其转换为日期时间对象时,我被告知我使用的格式无效...

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 Time,而 EDT 不是有效的 Joda Time 时区。没问题,根据文档,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

等等。我很确定我已经尝试了引号和转义字符的所有组合,试图让猪忽略“EDT”字符,但似乎没有任何效果(以上大部分内容只是在黑暗中拍摄)。

在我打开错误报告或其他相关内容之前,我有两个问题。1)我是否正确,因为 EDT 不是受支持的时区,所以这失败了?还是我的模式在某个地方错了?2)如果它因为 EDT 而失败,有没有办法逃避这些字符,或者我在这一步做错了什么?

4

1 回答 1

0

您无法使用 JODA 解析 EDT,但可以使用 JDK。EDT 是模棱两可的,可以有不同的值。

您应该对 StackOverflow Pattern 上的其他问题感兴趣,以将此字符串解析为 DateTime

于 2013-11-08T15:24:49.963 回答