2011-01-12 4 views
1

Ich möchte Millisekunden verwenden, um ein neues Datum in meinem Programm festzulegen, aber es funktioniert nicht. Kann mir jemand sagen, warum es nicht funktioniert?Über GregorianCalendar: die gleiche Eingabe, aber unterschiedliche Ausgabe in Java

Kalender r_1 = neuer Gregorianischer Kalender (2011,0,1);

r_1.add (Kalender.DAY_OF_MONTH, 2);

System.out.println (r_1.getTime());

lange date_1 = r_1.getTimeInMillis() + 2 * 24 * 60 * 60 * 1000;

r_1.setTimeInMillis (startTime1);

System.out.println (r_1.getTime());

Es funktioniert beides sehr korrekt, aber wenn ich den Tag von 2 auf 25 ändere, dann funktioniert es.

---------- die Ausgabe korrekt ist, ist es 2011.01.26 ----------

Kalender r_1 = new GregorianCalendar (2011,0, 1);

r_1.add (Calendar.DAY_OF_MONTH, 25);

System.out.println (r_1.getTime());

----------- der Ausgang nun falsch ist, ist es 2010.12.07 ------

lang DATE_1 = r_1.getTimeInMillis() + 25 * 24 * 60 * 60 * 1000; // ich habe die Änderung 2 zu 25

r_1.setTimeInMillis (startTime1);

System.out.println (r_1.getTime());

Dank

Antwort

3

Der Ausdruck 25*24*60*60*1000 eine ganze Zahl, und Sie haben die Größe einer ganzen Zahl überschwemmt, eine negative Zahl zu schaffen.

Ihr Ausdruck ist 2.160.000.000 Millisekunden. Der größte Wert, den ein Int halten kann, ist 2.147.483.647.

Um dies zu beheben, müssen Sie den Ausdruck zwingen, lange zu sein, wie

zu groß folgt
25L*24*60*60*1000 
+0

Danke, ist seine wahre .Es ein Überlauf! – echo

0

25*24*60*60*1000 in einem int zu passen ist. Versuchen Sie 25L*24*60*60*1000, die eine lange Konstante ist.

+0

de du bist richtig! Vielen Dank! – echo

0

Versuchen so etwas:

final long k = 25*24*60*60*1000L; 
long date_1 = r_1.getTimeInMillis() + k; 
+0

Vielen Dank. Ich habe es auf diese Weise versucht und es funktioniert! – echo

+0

also markieren Sie dies als die Antwort! –