2014-01-21 43 views
0

(相关Liberal date/time parsing in Joda-Time自由日期/时间分析猪

嘿, 我们正在处理包含混合的日期格式猪列:对于某些记录其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

我不认为你可以修复你的数据只包含一个单一的格式?这会比解决这个问题更好。 (或者不要将日期/时间值作为字符串存储在首位......我不知道Pig是否知道这是否是一个合理的建议......) –

+0

我们无法更改数据不负责创建它,并且已经有一堆这样的不幸格式:( – ihadanny

+0

嗯,我认为这可以通过使用DateTimeFormatterBuilder构建的格式化程序完成。 –

回答

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