Java: Was / Wo sind die Maximal- und Minimalwerte eines GregorianCalendar?
-
25-09-2019 - |
Frage
Was ist der Maximal- und Minimalwert eines GregorianCalendar?
Sind sie in einem konstanten wie Integer.MAX_VALUE, oder vielleicht GregorianCalendar.get (BLAH)?
Auf den Punkt gebracht, wie kann ich eine GregorianCalendar Instanz mit Min- / Max-Wert?
Lösung
Dies sollte funktionieren:
GregorianCalendar maxgc = new GregorianCalendar();
maxgc.setTime(new Date(Long.MAX_VALUE));
GregorianCalendar mingc = new GregorianCalendar();
mingc.setTime(new Date(Long.MIN_VALUE));
Andere Tipps
Ich nahm joekutner Vorschlag und lief es mit:
GregorianCalendar gCal = new GregorianCalendar( );
gCal.setTime(new Date(Long.MIN_VALUE));
System.out.println( "Min Date is " + gCal.getTime() + " " + gCal.get(Calendar.ERA));
gCal.set( Calendar.SECOND, 3 );
System.out.println( "Min Date less 1 second is " + gCal.getTime() + " " + gCal.get(Calendar.ERA));
gCal.setTime(new Date(Long.MAX_VALUE));
System.out.println( "Max Date is " + gCal.getTime() + " " + gCal.get(Calendar.ERA));
Min Date is Sun Dec 02 16:47:04 GMT 292269055 0
Min Date less 1 second is Sun Aug 17 07:12:54 GMT 292278994 1
Max Date is Sun Aug 17 07:12:55 GMT 292278994 1
, die zeigt, die Minimal- und Maximal, und zwischen ihnen ein Hinweis darauf, was passiert, wenn Sie versuchen, die zweite vor dem Minimum zu bewegen -. Sie wickeln um
Das war Version 1.6.0_17.
Sie können versuchen, eine href zu nennen <= "http://java.sun.com/j2se/1.5.0/docs/api/java/util/Calendar.html#getMinimum%28int%29" rel =“ nofollow noreferrer "> Calendar.getMinimum () für jede Art von Feld (dh Jahr, Monat, etc.) und dann diese Minimalwerte eingestellt auf Feldtypen entsprechen. Dies würde Ihnen die Mindest Kalender. Ich weiß nicht, ob es ein schneller Weg, um das zu tun.
Die anderen Antworten richtig sein, aber veraltete Klassen verwenden.
java.time
Die alten Datum Zeitklassen (java.util.Date/.Calendar etc.) wurden von der java.time Rahmen eingebaut in Java 8 und höher.
Die java.time Klassen sind inspiriert von Joda-Time , definiert durch JSR 310 , durch das ThreeTen-extra Projekt erweitert, zurückportiert zu Java 6 & 7 durch die ThreeTen-Backport Projekt und in der ThreeTenABP Projekt. Siehe Tutorial .
Für einen Moment auf die Timeline in UTC mit einer Auflösung von ns , verwendet Instant
. Bei einem gegebenen Offset-from-UTC , verwendet OffsetDateTime
. Für eine Zeitzone (Offset + Regeln für Anomalien), verwendet ZonedDateTime
, sondern von Natur aus nicht bestimmbaren min / max, noch hat ZoneId
. Für nur das Datum Wert ohne Zeit-of-Tag und ohne Zeitzone, verwendet LocalDate
. Für einen Zeit-of-Tag nur Wert ohne Datum und ohne Zeitzone, verwendet LocalTime
. Denn ohne Zeitzone Datum-Zeit, verwenden Sie LocalDateTime
.
Im Folgenden sind alle vordefinierten Konstanten.
-
Instant.MIN
=-1000000000-01-01T00:00Z
Instant.MAX
=1000000000-12-31T23:59:59.999999999Z
-
OffsetDateTime.MIN
=-999999999-01-01T00:00:00+18:00
OffsetDateTime.MAX
=+999999999-12-31T23:59:59.999999999-18:00
-
LocalDate.MIN
=-999999999-01-01
LocalDate.MAX
=+999999999-12-31
-
LocalTime.MIN
=00:00
LocalTime.MAX
=23:59:59.999999999
-
LocalDateTime.MIN
=-999999999-01-01T00:00:00
LocalDateTime.MAX
=+999999999-12-31T23:59:59.999999999
-
Year.MIN_VALUE
=-999,999,999
Year.MAX_VALUE
=+999,999,999
-
ZoneOffset.MIN
=-18:00
(aber-12:00
in der Praxis)
ZoneOffset.MAX
=+18:00
(aber+14:00
in der Praxis)
Achtung: Seien Sie vorsichtig, diese Werte als eine Art Flagge oder eine besondere Bedeutung zu verwenden. Viele andere Software-Bibliotheken und Datenbanken können nicht diese extremen Werte unterstützen.
Für eine Fahne oder eine besondere Bedeutung, wie ein nicht-null „kein Wert verfügbar“, schlage ich vor Kommissionierung einen beliebigen Moment aber vermeiden zu solchen extremen Reichweiten gehen entweder rückwärts oder vorwärts in der Zeit. Vielleicht ist der Unix Epoche Stichtag , der erste Moment des Jahres 1970 in UTC, 1970-01-01T00: 00: 00Z. Definiert als eine Konstante in Java: Instant.EPOCH
über java.time
Die java.time Rahmen 8 in Java gebaut und später. Diese Klassen verdrängen die lästige alte Vermächtnis Datum Zeitklassen wie java.util.Date
, Calendar
& SimpleDateFormat
.
Die Joda-Time Projekt jetzt in < a href = "https://en.wikipedia.org/wiki/Maintenance_mode" rel = "nofollow noreferrer"> 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 .
können Sie tauschen java.time Objekte direkt mit Ihrer Datenbank. Verwenden Sie einen JDBC-Treiber kompatibel mit JDBC 4.2 oder höher. Keine Notwendigkeit für Streicher, keine Notwendigkeit für java.sql.*
Klassen.
Wo die java.time Klassen erhalten?
- Java SE 8 , Java SE 9 , Java 10 SE und später
- Built-in.
- Ein Teil des Standard-Java-API mit einer gebündelten Implementierung.
- Java 9 fügt einige kleinere Features und Korrekturen.
- Java SE 6 und Java SE 7
- Ein großer Teil der java.time Funktionalität zurückportiert zu Java 6 & 7 in ThreeTen-Backport .
- Android
- Spätere Versionen von Android-Bundle Implementierungen der java.time Klassen.
- Für frühere Android (<26), die ThreeTenABP Projekt passt sich an ThreeTen-Backport (wie oben erwähnt). Siehe So verwenden ThreeTenABP ... .
Die ThreeTen-Extra Projekt erstreckt java.time mit zusätzlichen Klassen. Dieses Projekt ist eine Bewährungsprobe für eine mögliche zukünftige Ergänzungen java.time. Sie können einige nützliche Klassen hier wie Interval
YearWeek
, YearQuarter
und mehr .