Парс йода-тайм - PullRequest
       19

Парс йода-тайм

3 голосов
/ 28 февраля 2012

У меня есть Дата, похожая на строку, и я хочу ее проанализировать.
Но дата может выглядеть как одна из многих моделей.

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 голосов
/ 29 февраля 2012

Класс 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")
}
0 голосов
/ 28 февраля 2012

Первый шаблон не содержит пробелов и двоеточий.

Второй шаблон содержит двоеточие, но без пробелов.

Третий шаблон содержит пробел и двоеточие.

Последний содержит пробел, но без двоеточия.

Таким образом, используя два indexOf() вызова, вы сможете определить шаблон для применения.

Другим способом было быиспользуйте длину строки, которая отличается во всех шаблонах (8, 5, 14 и 13).

...