(与Liberal date/time parsing in Joda-Time相关)
嘿
我们正在处理包含混合日期格式的pig列:某些记录为09/11/2004 00:00:00
,有些记录为09/11/2004 00:00:00.000000
。
我们尝试使用pig11 ToDate
解析它(内部使用jodatime的DateTimeFormat.forPattern(DataType.toString(input.get(1)));
MM/dd/yyyy HH:mm:ss
我们得到Invalid format: "12/31/1969 00:00:00" is too short at org.joda.time.format.DateTimeFormatter.parseDateTime
MM/dd/yyyy HH:mm:ss.000000
我们得到Invalid format: "09/25/2009 00:00:00.000000" is malformed at ".000000"
你能建议一个可以处理两者的时间格式吗?我们需要使用自定义ToDate功能吗? 谢谢!
答案 0 :(得分:0)
您可以使用DateTimeFormatterBuilder
通过可选部分来实现此目的:
import org.joda.time.format.*;
class Test {
private static final DateTimeFormatter formatter =
new DateTimeFormatterBuilder()
.appendPattern("MM/dd/yyyy HH:mm:ss")
.appendOptional(DateTimeFormat.forPattern(".SSSSSS").getParser())
.toFormatter();
public static void main(String args[]) {
testParse("09/11/2004 00:00:00");
testParse("09/11/2004 00:00:00.000000");
}
private static void testParse(String input) {
System.out.println(formatter.parseLocalDateTime(input));
}
}