Domanda

Sto cercando di creare un momento 'fissa' (mezzanotte in formato 24 ore, vale a dire, 00:00:00) per impostare come una stringa per una query SQL SELECT utilizzando il seguente ...

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

GregorianCalendar todayDate = new GregorianCalendar();
Log.d(TAG, "todayDate: " + todayDate.getTime().toString());
Log.d(TAG, "formatted todayDate: " + sdf.format(todayDate.getTime()));
todayDate.clear(Calendar.HOUR);
todayDate.clear(Calendar.MINUTE);
todayDate.clear(Calendar.SECOND);
todayDate.set(Calendar.HOUR, 0);
todayDate.set(Calendar.MINUTE, 0);
todayDate.set(Calendar.SECOND, 0);
Log.d(TAG, "formatted modified todayDate: " + sdf.format(todayDate.getTime()));

Questo è bene a meno che l'ora attuale è PM. Ad esempio,

todayDate: Fri Jan 28 23:34:34 GMT 2011
formatted todayDate: 2011-01-28 23:34:34
formatted modified todayDate: 2011-01-28 12:00:00 <- THE hour is 12 not 00

Se faccio questo quando il tempo attuale è tra mezzanotte e mezzogiorno, (vale a dire, 00:00:00 -> 11:59:59) allora la mia ora nella stringa formattata è impostato correttamente su 00. Se lo faccio in qualsiasi momento dopo mezzogiorno e prima di mezzanotte allora ottengo 12 per la mia ora e non 00.

Qualcuno può spiegare questo e mi aiuta a trovare una soluzione (o un modo alternativo di fare le cose) per favore?

È stato utile?

Soluzione

È necessario HOUR_OF_DAY insieme a 0 invece di HOUR

todayDate.set(Calendar.HOUR_OF_DAY, 0);

Dal API docs :

HOUR Numero campo per get e set che indica l'ora della mattina o pomeriggio. ORA è utilizzato per il formato 12 ore (0-11). Mezzogiorno e mezzanotte sono rappresentati da 0, non per 12. esempio alle 10: 04:. 15.250 PM l'ora è 10

HOUR_OF_DAY Numero campo per get e set che indica l'ora del giorno. HOUR_OF_DAY viene utilizzato per l'orologio di 24 ore. Per esempio, alle 10: 04:. 15.250 PM il HOUR_OF_DAY è 22

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top