2010-11-11 4 views
2

давайте предположим, что я следующие даты (в String):Как заставить Joda-Time анализировать только часть строки?

2009-05-15T23:00:00 
2009-05-15T23:00:00.000Z 
2009-05-15 

Я не забочусь о времени и зоне, только дата актуальна для меня. Поэтому я хочу, чтобы попытаться разобрать его следующей схеме:

YYYY-MM-дд

Я пытаюсь разобрать его с помощью Joda-Time:

DateTimeFormat = DateTimeFormat.forPattern("yyyy-MM-dd"); 
format.withZone(zone).parseDateTime(string).toLocalDate(); 

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

java.lang.IllegalArgumentException: Invalid format: "2009-05-15T23:00:00.000Z" is malformed at "T23:00:00.000Z" 

Есть ли способ заставить Joda-Time игнорировать остальную часть строки?

ответ

1

У меня была та же проблема, несколько форматов даты, где я просто хотел игнорировать все после определенного момента. То, что я сделал, это создать потребление всех DateTimeParser, а затем добавить это с помощью DateTimeFormatterBuilder.

Я считаю, что это будет соответствовать вашим потребностям:

JodaDateTimeConsumeAll.java:

public class JodaDateTimeConsumeAll implements DateTimeParser{ 

    @Override 
    public int estimateParsedLength() { 
     return 100; 
    } 

    @Override 
    public int parseInto(DateTimeParserBucket bucket, String text, int position) { 
     return text.length(); //consume the whole thing 
    } 

} 

FormatterBuilder:

DateTimeParser dtp = new DateTimeFormatterBuilder() 
    .appendYear(4,4) 
    .appendLiteral("-") 
    .appendDayOfMonth(2) 
    .appendLiteral("-") 
    .appendMonthOfYear(2) 
    .append(new JodaDateTimeConsumeAll()) 
    .toFormatter() 
    .getParser(); 

Я надеюсь, что помогает.

3

Просто используйте соответствующую подстроку; 2009-05-15 и разобрать, что с рисунком yyyy-MM-dd.

+0

Спасибо, дело в том, что у меня есть много форматов, которые могут отличаться в последней части ... – krtek

+0

@krtek: ну подстрока (0, 10) будет соответствовать 2009-05-15 во всех случаях, когда вы упомянутый ;-) – darioo

0

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

На данный момент использовать шаблон (для даты строки формата 2009-05-15T23:00:00.000Z)

yyyy-MM-dd'T'HH:mm:ss.SSS'Z' 

ли ваш формат даты такой же в вашем приложении или они отличаются?


Основываясь на отредактированный пост, это кажется вам не очень нужны часть времени, поэтому просто получить соответствующие первые 10 символов строки даты и разобрать его с форматом yyyy-MM-dd.

+0

Формат даты может быть очень различным, поскольку они исходят из разных источников - см. переформатированный вопрос. – krtek

+0

Я вижу, что вы отредактировали свое сообщение ... будет обновляться. –

1

Я думаю, что сначала вам нужно будет сопоставить шаблон строки, а затем передать подстроку, подобранную jodatime.

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