2014-02-21 2 views
0

Я пытаюсь разобрать несколько возможных timeformats UTC с помощью Joda со следующим:DateTimeFormatter Joda разобрать несколько форматов Utc с дополнительным Millis

 DateTimeFormatter formatter; 
     DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder(); 
     builder.append(DateTimeFormat.forPattern("yyyyMMdd-HH:mm:ss.sss")); 
     builder.append(DateTimeFormat.forPattern("yyyyMMdd-HH:mm:ss")); 
     formatter = builder.toFormatter(); 
     formatter.withZone(DateTimeZone.UTC); 
     System.out.println(formatter.parseDateTime("20130122-12:01:59")); 

Я получаю следующее исключение:

Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "20130122-12:01:59" is too short 
    at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:873) 
    at com.cme.clearing.financials.gateway.internal.config.Sample.main(Sample.java:16) 

Есть ли любой способ попросить joda проанализировать дополнительные миллисы в UTC.

ответ

2

Да есть:

// Milliseconds parser 
final DateTimeParser msParser = new DateTimeFormatterBuilder() 
    .appendLiteral('.').appendDecimal(millisOfSecond(), 1, 3) 
    .toParser(); 

DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder(); 

builder = builder.appendFixedDecimal(year(), 4) 
    .appendFixedDecimal(monthOfYear(), 2) 
    .appendFixedDecimal(dayOfMonth(), 2) 
    .appendLiteral('-') 
    .appendFixedDecimal(hourOfDay(), 2) 
    .appendLiteral(':') 
    .appendFixedDecimal(minuteOfHour(), 2) 
    .appendLiteral(':') 
    .appendFixedDecimal(secondOfMinute(), 2) 
    .appendOptional(msParser); // <-- HERE: optional milliseconds 
// builder.build().withTimeZone(DateTimeZone.UTC) will return the formatter 

Конечно, приспособиться к коду, но это должно быть довольно легко.

Редактирование: адаптировано к требованию OP

+0

Этот форматтер не печатает в joda-time> = 2.2. Есть ли способ получить то же самое поведение, но разрешить печать (отбрасывание миллисов)? – juell

+0

@juell Я должен буду исследовать; Я не уверен, какая версия Joda Time я использую – fge

+0

. Я разместил это как отдельный вопрос только сейчас: http://stackoverflow.com/questions/29921105/print-from-joda-time-datetimeformatter-with- необязательный-парсер, ответьте, если вы это выясните :) – juell

Смежные вопросы