使用带有无效时区的ToDate()

时间:2013-11-08 14:46:38

标签: java datetime apache-pig jodatime simpledateformat

我正在使用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"

我强烈怀疑的原因是,猪使用Joda Time,而EDT不是有效的Joda Time时区。没问题,根据文档,Pig使用简单日期格式,我可以转义字符串(请参阅第一个example)。除了我似乎无法做到这一点......

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失败,有没有办法逃避这些角色,或者我在这一步做错了什么?

1 个答案:

答案 0 :(得分:0)

你不能用JODA解析EDT,你可以用JDK解析。 EDT含糊不清,可以有不同的值。

您应该对StackOverflow上的其他问题感兴趣 Pattern to parse this string to a DateTime