2010-07-25 6 views
4

Je veux faire la différence entre deux objets Java Date. J'ai utilisé la bibliothèque Joda-Time. Mais le problème est que je reçois les jours plus grande différence que celle de la différence de jour réelle.Différence de jours entre deux dates Java?

Voici mon extrait de code:

DateFormat formatter = new SimpleDateFormat("mm/dd/yyyy"); 

Date someDate=new Date(); 
Date today = Calendar.getInstance().getTime(); 

try  { 
    someDate = formatter.parse("06/22/2010"); 
} 
catch(ParseException pe) { 
    System.out.println("Parser Exception"); 
} 

int days = Days.daysBetween(new DateTime(someDate), new DateTime(today)).getDays(); 

System.out.println(" Days Between " + someDate + " : " + today + " - " + days); 

Voici ma sortie:

Days Between Fri Jan 22 00:06:00 IST 2010 : Sun Jul 25 19:27:01 IST 2010 - 184 

Ici, Pourquoi cela prend "06/22/2010" comme le 22 janvier? Est-ce que quelqu'un fait face à un problème similaire?

Aide-moi amis .. Merci à l'avance ..

Répondre

12

Mois est MM

Dans votre cas:

DateFormat = new formatter SimpleDateFormat (» MM/jj/aaaa ");

3

mm => minutes, pas les mois - vous avez besoin de MM pendant des mois - cela résoudra votre problème de Jan!

4

Votre motif est légèrement défectueux. mm est analysé comme minutes dans l'heure, vous cherchez MM qui est mois de l'année.

19

Il semble que mm se réfère aux minutes et non aux mois, ce qui correspond à MM. S'il vous plaît vérifier here pour voir la liste des caractères appropriés :)

+0

s'il vous plaît rafraîchir le lien –

+0

@ShahzadImam: lien pointe maintenant à la nouvelle version des JavaDocs. – npinti

+0

Merci. Résolu le problème ..... mm –

2

Les autres réponses ont résolu correctement votre problème spécifique.

LocalDate

Mais il y a une solution plus grande. Si vous commencez avec seulement des dates, aucune heure et aucun fuseau horaire, alors vous devriez utiliser la classe LocalDate plutôt que DateTime.

Fuseau horaire

Votre code ignore la question cruciale des fuseaux horaires. Les fuseaux horaires importent même pour LocalDate, en essayant de déterminer "aujourd'hui". Voulez-vous la date d'aujourd'hui à Montréal ou à Paris? Un nouveau jour se lève à Paris plus tôt. Lorsque vous omettez le fuseau horaire, vous obtenez le fuseau horaire par défaut actuel de la JVM.

Joda-temps peut Parse

De plus, laissez Joda temps faire l'analyse syntaxique. Pas besoin d'utiliser java.util.Date & .Calendar du tout. Les caractères de mise en forme de Joda-time sont presque les mêmes que java.util.Date mais pas tout à fait donc soyez père à consulter le doc. Dans ce cas, c'est identique.

DateTimeFormatter formatter = DateTimeFormat.forPattern("MM/dd/yyyy"); 
LocalDate past = formatter.parseLocalDate("06/22/2010"); 
DateTimeZone = DateTimeZone.forID("America/Montreal"): // match time zone intended for that input string. 
int days = Days.daysBetween(past, LocalDate.now(timeZone)); 
Questions connexes