Java.util.Calendar - Millisekunden seit dem 1. Januar 1970

8

Programm gefolgt von Ausgabe. Jemand bitte erklären Sie mir, warum 10.000.000 Millisekunden vom 1. Januar 1970 der 31. November 1969 ist. Nun, jemand bitte erklären, was falsch ist mit meiner Annahme, dass der erste Test eine Zeit 10.000.000 Millisekunden vom 1. Januar 1970 produzieren sollte. Zahlen kleiner als 10.000.000 produzieren das gleiche Ergebnis.

%Vor%
  

Langer Wert: 10000000

     

Kalenderzeit in Millis: 10000000

     

Datum im JJJJ-MM-TT-Format: 1969-11-31

     

Langer Wert: 1000000000000

     

Kalenderzeit in Millis: 1000000000000

     

Datum im JJJJ-MM-TT-Format: 2001-8-8

    
Nathan Spears 04.11.2008, 20:48
quelle

6 Antworten

12

Die Daten, die Sie aus Calendar drucken, sind lokal in Ihrer Zeitzone, während die Epoche als Mitternacht des 1970-01-01 in UTC definiert ist. Wenn Sie also in einer Zeitzone westlich von UTC leben, wird Ihr Datum als 1969-12-31 angezeigt, obwohl (in UTC) immer noch 1970-01-01.

    
Chris Jester-Young 04.11.2008, 21:03
quelle
6

Zuerst gibt c.get (Calendar.MONTH) 0 für Jan, 1 für Feb usw. zurück.

Zweitens verwenden Sie DateFormat, um Datumsangaben auszugeben.

Drittens sind Ihre Probleme ein gutes Beispiel dafür, wie umständlich das Java-Date-API ist. Verwenden Sie Joda Time API, wenn Sie können. Es wird dein Leben etwas einfacher machen.

Hier ist ein besseres Beispiel Ihres Codes, der die Zeitzone anzeigt:

%Vor%     
Steve McLeod 04.11.2008 21:05
quelle
5

Kalender # setTimeInMillis () setzt die Kalenderzeit auf die Anzahl der Millisekunden nach dem 1. Januar 1970 GMT .

Kalender # get () gibt das angeforderte Feld zurück, das für die Zeitzone des Kalenders angepasst wurde und standardmäßig lokale Zeitzone des Geräts ist.

Dies sollte wie erwartet funktionieren, wenn Sie beim Erstellen des Kalenders die Zeitzone "GMT" angeben:

%Vor%     
Mike 04.11.2008 21:18
quelle
3

Traurigerweise waren java.util.Date und java.util.Calendar schlecht entworfen, was zu dieser Art von Verwirrung führte.

    
Julien Chastang 05.11.2008 00:25
quelle
1

Ihre Zeitzone ist am wahrscheinlichsten hinter GMT zurück (zB GMT-5), also 10.000.000ms von der Epoche ist der 31. Dezember 1969 in Ihrer Zeitzone, aber da Monate Null-basiert sind in java.util.Calendar Ihr Kalender- & gt; Textumwandlung ist fehlerhaft und Sie erhalten 1969-11-31 statt der erwarteten 1969-12-31.

    
Alexander 05.11.2008 00:16
quelle
0

Sie können selbst herausfinden, ob Sie Ihre erste c.setTimeInMillis(l); in c.clear();

ändern     
Davide 04.11.2008 21:02
quelle

Tags und Links