2012-12-10 2 views
0

Avec JodaTimeJodaTime: dates analyse syntaxique avec les principaux traits d'union

DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'").withZone(DateTimeZone.UTC); 
java.util.Date parsedDate = dtf.parseDateTime("-012-10-25T10:03:22Z").toDate(); 

System.out.println(parsedDate) 

impressions

'Tue Oct 27 04:03:22 CST 13' 

Comme vous pouvez le constater, le timeZone local est CST.

Je m'attends à ce qu'une exception soit levée car la date qui est passée n'est pas dans le format attendu. ou peut être une NumberFormatException pour, '-' n'est pas un nombre

+0

Quelle est la question? –

+0

Je pense qu'il traite '-012' comme un nombre, le' .getYear() 'dans cette date est' -1887' – Esailija

+0

Lorsque vous spécifiez un modèle dans la méthode 'forPattern', vous devez fournir une date dans ce format pour 'parseDateTime', et il vous donnera un objet' Date' valide. – knownasilya

Répondre

3

Joda prend en charge des années avant zéro (voir DateTimeConstants.BC cela signifie Avant le Christ).
Donc, -012-10-25T10:03:22Z est traité par Joda comme 12 ans B.C.

DateTime d = dtf.parseDateTime("-012-10-25T10:03:22Z"); 
System.out.println(d.getEra()); // returns 0 -> that means B.C. era Before Christ 
System.out.println(d.getYear()); // returns -12 

si vous voulez jeter exception, alors vous devriez le faire manuellement, becouse Joda ne jette pas exception dans ce cas. Ne somethid comme

DateTime dateTimeParser(String dateAsString) 
    { 
     DateTime res = dtf.parseDateTime(dateAsString); 
     if (d.getYear() < 0) throw new IllegalArgumentException(); 
     return res; 
    } 

Ou utilisez SimpleDateFormat pour analyser Date