Domanda

Oggi è Martedì 9 Febbraio 2010 e quando stampo la data ottengo la data sbagliata:

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());

I risultati della linea di stampa in: "Oggi è sab 9 gen 00:00:00 CST 2010"

E 'certamente non è Sabato 9 gennaio, è Martedì febbraio 09. Sto assumendo che sto facendo qualcosa di sbagliato, così chiunque può farmi sapere che cosa c'è che non va qui? Devo impostare manualmente il giorno della settimana?

Aggiorna Nota: Non voglio inizializzare oggi con new Date() perché voglio le ore, minuti, secondi e millesimi di secondo inizializzati a 0. Ciò è necessario in modo da poter confrontare la data e l'input dell'utente con l'oggi: se la data odierna input dell'utente e io uso il formattatore per costruire un oggetto Date, poi se mi inizializzo oggi con new Date() e confrontare i due date-oggi sarà dopo la data selezionata dall'utente (che non è corretto). Così ho bisogno di inizializzare oggi, all'inizio della giornata senza l'AR / min / sec / ms.

È stato utile?

Soluzione

Confusamente, Calendario mesi contano da 0 (gennaio) a 11 (dicembre), in modo che stai passando "2010-01-09" per formatter.parse () quando si estrae il campo MESE dal Calendario.

C'è una discussione su questo in un domanda SO .

Altri suggerimenti

Se non si desidera utilizzare JodaTime si può utilizzare:

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();

Questo è molto più efficiente e meno soggetto a errori di formattazione String / approccio di analisi.

Se è possibile utilizzare JodaTime questo è un metodo di gran lunga preferito:

LocalDate date = new DateTime().toLocaleDate();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top