解析joda-time

时间:2012-02-28 16:21:33

标签: java jodatime

我的Date看起来像String,我想解析它。
但是日期可能看起来像许多模式中的一种。

MM/dd/yy  

HH:mm  

MM/dd/yy HH:mm

MM/dd/yy HHmm   

我有代码,可以解析许多模式

public DateTime parseDateTime(final String text)
   {
      if (StringUtils.isEmpty(text)) return null;
      int field = 0;
      DateTime dateTime = null;
      IllegalArgumentException exception = null;
      for (; field < FIELD_COUNT; ++field)
      {
         if (null != formatters[field])
         {
            try
            {
               dateTime = formatters[field].parseDateTime(text);
               break;
            }
            catch (final IllegalArgumentException e)
            {
               exception = null != exception ? exception : e;
            }
         }
      }
      if (dateTime == null)
      {
         throw exception;
      }
      return dateTime;
   }

formatters[]

的数组
DateTimeFormatter

你能建议一个不同的方式吗?更简单

2 个答案:

答案 0 :(得分:0)

第一个模式不包含空格,也没有冒号。

第二个包含冒号,但没有空格。

第三个包含空格和冒号。

最后一个包含空格,但没有冒号。

因此,使用两个indexOf()调用,您应该能够确定要应用的模式。

另一种方法是使用字符串的长度,这在所有模式中都是不同的(8,5,14和13)。

答案 1 :(得分:0)

SimpleDateFormat类可以解析您指定的任何字符串格式的日期。有关格式规则,请参阅javadoc

例如,

    try
    {
        DateFormat df = new SimpleDateFormat("MM/dd/yy HHmm");
        Date date = df.parse("03/29/12 2359");
        System.out.println(date);
    }
    catch (ParseException e)
    {
        e.printStackTrace();
    }

因为如果解析了所有格式字段,解析可以忽略尾随字符,从最长/最复杂的字符开始,以最短/最简单的字符结束。拿第一个没有抛出异常的那个。

在你的情况下:

{
new SimpleDateFormat("MM/dd/yy HH:mm"),
new SimpleDateFormat("MM/dd/yy HHmm"),
new SimpleDateFormat("MM/dd/yy"),
new SimpleDateFormat("HH:mm")
}