猪的自由日期/时间解析

时间:2014-01-21 11:51:22

标签: datetime apache-pig jodatime

(与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功能吗? 谢谢!

1 个答案:

答案 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));
    }
}