我正在使用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失败,有没有办法逃避这些角色,或者我在这一步做错了什么?
答案 0 :(得分:0)
你不能用JODA解析EDT,你可以用JDK解析。 EDT含糊不清,可以有不同的值。
您应该对StackOverflow上的其他问题感兴趣 Pattern to parse this string to a DateTime