2013-05-20 4 views
1

Есть ли простой способ разобрать разные типы дат в java без игры с строками даты?Java parse different types types

мне приходится иметь дело с 6 различных типов даты:

  • 16 мая 2013 19:27:12 CEST
  • Вт, 14 мая 2013 13:15:00 +0200
  • 2013- 05-20T12: 01: 57Z
  • 13/11/2012 15:30:00
  • 11.11.2013
  • 1970-01-01T00: 00: 00.000Z

Я не знаю, придет ли дата в том или ином формате с сервера ...

спасибо!

+2

чек из JodaTime http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormatter.html#parseDateTime%28java. lang.String% 29 – hovanessyan

+0

Я хочу, чтобы размер пакета был как можно меньше, поэтому я не думаю, что буду использовать внешнюю библиотеку только для дат. В любом случае, спасибо! Это хороший ответ! – aveschini

ответ

1

Чтобы подробно рассказать об использовании «Использовать Joda-Time», в Joda-Time вы можете создать DateTimeParser для каждого из ваших 6 форматов, а затем добавить их к одному DateTimeFormatter.

Смотрите принятый ответ на этот вопрос: Using Joda Date & Time API to parse multiple formats

+0

Я думаю, что это лучший ответ, потому что я не указал размер пакета. Спасибо! – aveschini

4

Вы можете перебирать все форматы и пытаться разобрать, игнорировать исключение. Если формат не подходит, выбросьте исключение.

similar answer

1

Самая известная альтернатива стандартному API является Joda времени. Также JSR 310 улучшенный API Дата/Время для Java SE 7

+0

Это хороший ответ, но я должен держать размер пакета как можно меньше, поэтому я не думаю, что буду использовать внешние библиотеки только для дат.Спасибо вам, конечно, 1 – aveschini

0

Вот пример кода для строки даты, например, 2001-07-04T12: 08: 56.235-0700, нам нужно использовать следующий формат «yyyy-MM- dd'T'HH: мм: ss.SSSZ»

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
Date date = simpleDateFormat.parse("2001-07-04T12:08:56.235-0700"); 
System.out.println(date); 

детали доступны в указанной ниже ссылке

SimpleDateFormat

1

Я не думаю, что есть фактический„легкий“способ иметь дело с такие разные форматы даты. Если у вас есть возможность прикрепить к стандарту «стандартный формат даты», это будет простой способ.

Общий подход заключается в создании DateParser для каждого формата «freaky», с которым вам приходится иметь дело. Вот пример для первого дня, используя Joda Время:

String date1 = "16 May 2013 19:27:12 CEST"; 
     DateTimeFormatter fmt = new DateTimeFormatterBuilder() 
      .appendDayOfMonth(2) 
      .appendLiteral(' ') 
      .appendMonthOfYearShortText() 
      .appendLiteral(' ') 
      .appendYear(4, 4) 
      .appendLiteral(' ') 
      .appendHourOfDay(2) 
      .appendLiteral(":") 
      .appendMinuteOfDay(2) 
      .appendLiteral(":") 
      .appendSecondOfDay(2) 
      .appendLiteral(' ') 
      .appendLiteral("CEST") 
      .toFormatter(); 

     DateTime parseDateTime = fmt.parseDateTime(date1); 

     System.out.println(parseDateTime); 

Я надеюсь, что это поможет вам построить DateParsers для других случаев. И помните - всегда сохраняйте свои даты по отношению к UTC!