2016-06-03 10 views
0

dass trivial sein sollte: Ich möchte alle Zeitinformationen entfernen und nur Tag Set verlassen:Klar Calendar.HOUR funktioniert nicht auf Android

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 
Calendar calendar = Calendar.getInstance(); 
log.debug("{}", calendar.getTimeInMillis()); 
calendar.clear(Calendar.HOUR_OF_DAY); 
log.debug("{}", calendar.getTimeInMillis()); 
calendar.clear(Calendar.MINUTE); 
log.debug("{}", calendar.getTimeInMillis()); 
calendar.clear(Calendar.SECOND); 
log.debug("{}", calendar.getTimeInMillis()); 
calendar.clear(Calendar.MILLISECOND); 
log.debug("{}", calendar.getTimeInMillis()); 
String today = format.format(calendar.getTime()); 

Aber es lässt Stunde Set:

06-03 07:14:31.296 1464930871295 
06-03 07:14:31.297 1464930871295 
06-03 07:14:31.297 1464930031295 
06-03 07:14:31.298 1464930000295 
06-03 07:14:31.299 1464930000000 
06-03 07:14:31.300 Date is Thu Jun 02 07:00:00 GMT+02:00 2016 

Warum?

aktualisieren

Android javadoc könnte falsch sein, da einige Antworten darauf hin:

Löscht den Wert im Zeitfeld gegeben, es Frisch- und Markierung einen Wert von Null zugewiesen wird. Der tatsächliche Feldwert wird beim nächsten Zugriff auf das Feld ermittelt.

+1

was nehme an, wenn Sie tun 'calendar.set (Calendar.HOUR_OF_DAY, 0);'? –

+0

Die Felder HOUR_OF_DAY, HOUR und AM_PM werden unabhängig behandelt und die Auflösungsregel für die Tageszeit wird angewendet. Wenn Sie eines der Felder löschen, wird der Stundenwert dieses Kalenders nicht zurückgesetzt. Verwenden Sie set (Calendar.HOUR_OF_DAY, 0), um den Stundenwert zurückzusetzen. – Krutik

Antwort

3

Die Javadoc of Oracle sagt set(Calendar.HOUR_OF_DAY, 0) (für Stunden nur) zu verwenden, anstatt:

Die HOUR_OF_DAY, HOUR und AM_PM Felder behandelt werden unabhängig und die die Auflösungsregel für die Tageszeit angewendet wird. Das Löschen eines der Felder setzt den Stundenwert dieses Kalenders nicht zurück. Verwenden Sie set (Calendar.HOUR_OF_DAY, 0), um den Stundenwert zurückzusetzen.

Die Android Javadoc nicht erwähnt es nicht, aber ich nehme an, es auf die gleiche Weise verhält sich (es kann im Moment nicht testen)

+2

Android Javadoc ist anders. Danke trotzdem, ich werde es versuchen, aber ich muss jetzt gehen. –

0

Von Dokumentation des Kalenders über clear(int field):

Clears the value in the given time field, marking it unset and assigning it a value of zero. 
The actual field value will be determined the next time the field is accessed. 

Wenn Sie calendar.getTimeInMillis() in Log aufrufen, wird der Wert erneut festgelegt. Wenn Sie sehen möchten, wie die Methode funktioniert, können Sie dort einen Haltepunkt setzen und debuggen, um zu sehen, wie die Werte zurückgesetzt werden.

1

Eine weitere Möglichkeit, anderen Einheiten als Datum zu löschen ist, alle Einheiten auf 0 oder Standardmindest Art und Weise von unten zu setzen

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 
Calendar calendar = Calendar.getInstance(); 

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

String today = format.format(calendar.getTime()); 
Verwandte Themen