Question

Aujourd'hui est le mardi 9 Février 2010 et quand j'imprimer la date je reçois la mauvaise date:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

Date today = formatter.parse(String.format("%04d-%02d-%02d",
        Calendar.getInstance().get(Calendar.YEAR),
        Calendar.getInstance().get(Calendar.MONTH),
        Calendar.getInstance().get(Calendar.DAY_OF_MONTH)));

System.out.println("Today is " + today.toString());

Les résultats de la ligne d'impression en: "Aujourd'hui est Sam 9 janvier 00:00:00 CST 2010"

Il est très certainement pas samedi Jan 09, il est mardi 09 fév Je suppose que je fais quelque chose de mal, donc quelqu'un peut me faire savoir ce qui ne va pas ici? Dois-je régler manuellement le jour de la semaine?

Mise à jour Note: Je ne veux pas initialiser aujourd'hui avec new Date() parce que je veux les heures, minutes, secondes et millisecondes initialisées à 0. Cela est nécessaire pour que je puisse comparer une date d'entrée utilisateur aujourd'hui: si les entrées utilisateur la date d'aujourd'hui et j'utiliser le formatter pour construire un objet Date, puis si j'initialiser aujourd'hui avec new Date() et je compare les deux aujourd'hui DATES sera après l'utilisateur date sélectionnée (ce qui est incorrect). Ainsi, je dois initialiser aujourd'hui au début de la journée sans h / min / sec / ms.

Était-ce utile?

La solution

Embrouillant, mois Calendrier compter de 0 (Janvier) à 11 (Décembre), donc vous passez « 2010-01-09 » à formatter.parse () lorsque vous extrayez le champ du mois dans le calendrier.

Il y a une discussion sur cela dans un question SO .

Autres conseils

Si vous ne souhaitez pas utiliser JodaTime vous pouvez utiliser:

Calendar calendar = Calendar.getInstance();

calendar.set( Calendar.HOUR_OF_DAY, 0 );
calendar.set( Calendar.MINUTE, 0 );
calendar.set( Calendar.SECOND, 0 );
calendar.set( Calendar.MILLISECOND, 0 );

Date today = calendar.getTime();

Il est beaucoup plus efficace et moins sujette aux erreurs que la mise en forme de chaîne / approche l'analyse syntaxique.

Si vous ne pouvez utiliser ce JodaTime est une méthode beaucoup préféré:

LocalDate date = new DateTime().toLocaleDate();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top