In meinem Java (eigentlich Android, aber es ist irrelevant hier) Projekt, kann der Benutzer Start-und Endzeit für einige Aktivität eingeben und das System berechnet automatisch die Dauer. Beim Drücken der Taste verwende ich System.currentTimeMillis()
, um den aktuellen Zeitstempel zu erhalten.Erhalten pure Zeit Element von langen Zeitstempel
Aus Gründen außerhalb des Bereichs dieser Frage muss ich den Datumsteil des Zeitstempels verwerfen und nur die Zeit eins speichern. Leicht, dachte ich, teilen nur durch die Anzahl der Millisekunden an einem Tag und nehmen den Rest:
long currentTimestamp = System.currentTimeMillis();
long timeOnly = currentTimeStamp % (1000 * 60 * 60 * 24);
Diese fast Werke - außer es Zeitstempel um eine Stunde erzeugt. Hier ein Beispiel:
DateFormat timeFormat = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.US);
long currentTimestamp = System.currentTimeMillis();
long timeOnly = currentTimestamp % (1000 * 60 * 60 * 24);
System.out.println("Full value: " + timeFormat.format(currentTimestamp));
System.out.println("Time only: " + timeFormat.format(timeOnly));
Dieser Code druckt:
Full value: 10:53 PM
Time only: 11:53 PM
Full value: 11:19 PM
Time only: 12:19 AM
Während ich nur eine Stunde von dem Zeitstempel subtrahieren kann, möchte ich den Grund eigentlich verstehen, warum dies geschieht.
Ich bin mir nicht sicher ... aber meine Intuition sagt mir, dass es etwas mit Zeitzonen zu tun hat. Lass mich das überprüfen - wir sind gerade in DTS ... das würde die Stunde erklären :). Ihr currentTimeMillis ist ein UNIX-Zeitstempel (in UTC würde Ihre Berechnung funktionieren ...). Ich bin wieder da :) – Philipp
Es lohnt sich, darauf hinzuweisen, dass ich selbst in Großbritannien bin und wir noch nicht in der Sommerzeit sind. Ich bekomme genau das gleiche Ergebnis, wenn ich 'Locale.UK' verwende. –
addiere' timeFormat.setTimeZone (TimeZone.getTimeZone ("UTC")); 'und du wirst den Unterschied nicht haben ... es ist sicher ein Zeitzonenproblem :). Das 'Locale' dient nur der Formatierung, nicht der Zeitzone. – Philipp