Frage

Ich habe Probleme mit Javas Kalender. Ich analysiere einige Daten aus einer TXT -Datei und muss ein Datum erstellen. Nach Abschluss des folgenden Codes:

tmpYear = Double.parseDouble(row[yearIndex]);
tmpMonth = Double.parseDouble(row[monthIndex]);
tmpDay = Double.parseDouble(row[dayIndex]);
if(timeIndex != -1)
    tmpTime = Double.parseDouble(row[timeIndex]);
if(secondsIndex != -1)
    tmpSeconds = Double.parseDouble(row[secondsIndex]);

Ich kann debuggen und sehen, dass die Variablen wie folgt sind: tmpyear == 2010
tmpmonth == 12
tmpday == 30
tmptime == 15 (Dies ist die Stunde des Tages)
tmpseconds == 0

Aber beim Ausführen des folgenden Code:

cal.set((int)tmpYear,(int)tmpMonth,(int)tmpDay,(int)tmpTime,
            (int)((tmpTime - (int)tmpTime)*100),(int)tmpSeconds);
System.out.println(cal.getTime().toString());

Ich bekomme das für eine Ausgabe:
Sonne 30. Januar 15:00:00 CST 2011

Kann jemand erklären, was ein möglicher Grund dafür wäre? Vielen Dank im Voraus für die Hilfe!

War es hilfreich?

Lösung

Monate werden 0-11 anstelle von 1-12 indiziert.
0 = Januar
1 = Februar
...
11 = Dezember
Verwenden tmpMonth = value -1 stattdessen.

Andere Tipps

Ich glaube, der Wert des Monats beginnt bei 0 und nicht bei 1, also interpretiert er 0 als Jan, 1 als Februar ... und dann wieder als 12 Jan.

Aus der API:

Monat - Der Wert, der verwendet wird, um das Monatszeitfeld festzulegen. Der Monatswert ist 0 basiert. zB 0 für Januar.

Wenn Sie das Feld Kalender.month festlegen, ist es auf Null basiert. {Januar = 0 ... Dezember = 11}

Der Grund ist recht einfach: Entwurfsfehler in der Kalender -API. Deshalb ist der JSR 310 auf dem Weg, um die Java -Unterstützung für Daten zu verbessern.

Technisch gesehen hielten es die Autoren der Klasse für gut, nur statische Felder zu verwenden. Sie müssen also Folgendes verwenden:

calendar = ...
calendar.setMonth(Calendar.JANUARY);

Sie glaubten nicht, dass die Leute dynamische Einstellungen für einen Kalender benötigen, genau wie Sie es brauchen (und die meisten von uns, denn das ist wichtig).

Die Monatswerte gehen von 0 (Januar) bis 11 (Dezember). Versuchen Sie, ((int) tmpmonth) - 1 zu verwenden, wenn Sie den Monat für den Dezember festlegen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top