Frage

Ich bin mit einem gregorianischen Kalender ein bestimmtes Datum und Zeit auf eine Anwendung, um die Set-Funktion des Gregorianischen Kalenders verwendet wird. Wenn ich die getTime () Methode verwenden, gibt es mir die jedoch richtig ausgegeben, wenn ich Zugriff versuchen, die Hour_Of_Day und Minute eine falsche Nummer gibt.

    Calendar time = new GregorianCalendar();
    time.set(2010, Calendar.JANUARY, 1, 7, 20,0);       
    hour = time.HOUR_OF_DAY;
    minute = time.MINUTE; 

Die Stunde gibt eine Leistung von 11 und die Minute gibt einen einen Wert von 12
Alle Vorschläge, wie dieses Problem beheben? Dank

War es hilfreich?

Lösung

Der Code ist die Zuordnung nur Stunde / Minute zu Konstanten. Sie müssen Calendar.get (int) nennen:

hour = time.get(Calendar.HOUR_OF_DAY);
minute = time.get(Calendar.MINUTE);

Andere Tipps

tl; dr

myGregCal
    .toZonedDateTime()  // Convert from legacy class GregorianCalendar to modern ZonedDateTime.
    .getHour()          // Get hour-of-day, 0-23.

java.time

Viele einfacher mit den modernen java.time Klassen, die diese lästigen alten Legacy-Datum-Zeit-Klassen ersetzen.

Die ZonedDateTime Klasse stellt ein Moment auf der Timeline in einer bestimmten Zeitzone mit einer Auflösung von Nanosekunden.

Konvertieren von Ihrem GregorianCalendar mit neuen Methoden hinzugefügt, um die alten Klassen.

ZonedDateTime zdt = myGregCal.toZonedDateTime() ;

Oder starten Sie frisch ohne GregorianCalendar Klasse.

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.of( 2010 , Month.JANUARY , 1 , 7 , 20 , 0 , 0 , z );

Wenn Sie nur mit dem Time-of-day-Teils arbeiten wollen, extrahieren Sie eine LocalTime.

LocalTime localTime = zdt.toLocalTime() ;

Wenn Sie wirklich die ganzen Zahlen von Stunden und Minuten möchten, können Sie für diejenigen befragen.

int hour = zdt.getHour();
int minute = zdt.getMinute();

Über java.time

Die java.time Rahmen in Java 8 und später gebaut. Diese Klassen verdrängen die lästige alte Vermächtnis Datum Zeitklassen wie java.util.Date , Calendar & SimpleDateFormat .

Die Joda-Time Projekt nun in Wartungsmodus , rät Migration auf die java.time Klassen.

Um mehr zu erfahren, finden Sie in der Oracle Tutorial . Und Stack-Überlauf suchen viele Beispiele und Erklärungen. Spezifikation JSR 310 .

Wo die java.time Klassen erhalten?

Die ThreeTen-Extra Projekt erstreckt java.time mit zusätzlichen Klassen. Dieses Projekt ist ein proving Boden für eine mögliche zukünftige Erweiterungen java.time. Sie können einige nützliche Klassen hier wie Interval YearWeek , YearQuarter und mehr .

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