2012-04-19 5 views
3

Si cette fonction est passée une date non valide et un IllegalFieldValueExcption est levée, je voudrais retourner une date par défaut de 0001-01-01. Mais lorsque le code ci-dessous est exécuté, la date créée dans defaultDate est 0001-01-02, ce qui est faux. Est-ce que quelqu'un voit quelque chose que je fais mal?date d'analyse 01-01-0001 avec jodatime

public Date unmarshal(String string) {  
    DateTimeFormatter fmt = new DateTimeFormatter(null, DateTimeFormat.forPattern("yyyy-MM-dd").getParser()); 
    Date defaultDate = DateTime.parse("0001-01-01", fmt).toDate(); 

    try { 
     return formatter.parseDateTime(string).toDate(); 
    } 
    catch (IllegalFieldValueException e) { 
     return defaultDate; 
    } 
} 

EDIT:

Je mis à jour les deux premières lignes avec ces derniers et il fonctionne maintenant parfait, merci!

Chronology chrono = GJChronology.getInstance(); 
Date defaultDate = new DateTime(0001, 01, 01, 10, 0, 0, 0, chrono).toDate(); 

Répondre

4

La question que vous avez est parce que la valeur par défaut chronology dans Joda-Time ISO. Ce système de calendrier est le même que celui utilisé par les entreprises dans la majorité du monde aujourd'hui. Le système ISO est inadapté pour les travaux historiques avant 1583 car il applique les règles des années bissextiles à partir d'aujourd'hui (c'est un calendrier proleptique).

Vous ne devriez donc pas utiliser un defaultDate avant 1583 avec ISO Chronology. Si vous devez utiliser cette date, vous devez utiliser une chronologie différente dans Joda-Time.

+0

+1. "renvoyer une date par défaut de 0001-01-01" sent mauvais (jodatime ou non). peut-être préférable de retourner 'null' à la place? – leonbloy

+1

0001-01-01 est la «date basse» utilisée pour notre système, je n'ai pas créé cela, c'est juste ce qu'il doit être. –

+1

Il s'agit également d'une valeur de date assez courante pour les dates faibles non nulles dans la base de données Oracle –

Questions connexes