Java GregorianCalendar
Ich bin mit der GregorianCalendar
in Java, und ich Frage mich, wie kann ich verwenden, um zu überprüfen, ob ein Datum gültig ist (E. g.: um zu überprüfen, ob Feb 29 ist nur im Schaltjahr, um zu überprüfen, ob das Datum nicht früher als die aktuellen Daten, etc).
Habe ich einen GregorianCalendar-Objekt und übergeben Sie die Werte der Daten, die ich möchte, um zu überprüfen, wie folgt:
GregorianCalendar cal1 = new GregorianCalendar(day,month,year);
Wenn das Datum gültig ist, würde ich gerne den Wert true zurück. Wie könnte ich dies tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Grundlegende Idee: wenn Sie versuchen, die ungültigen Datum, um den Kalender-Instanz, würde es machen Sie es richtig,
Beispielsweise wenn du 45 als Datum wäre es nicht das gleiche, wenn Sie festlegen und abrufen
Überprüfen, dass nach der Schöpfung, der Tag, der Monat und das Jahr ist noch die gleiche wie die ursprünglichen Werte, die Sie übergeben. Wenn die ursprünglichen Werte falsch sind, wird das Datum erhalten entsprechend angepasst. E. g.. wenn Sie passieren (29, 1, 2011) - beachten Sie, dass der Monat Wert ist 0-basiert, so dass 1 ist für Februar -, erhalten Sie zurück (1, 3, 2011).
tl;dr
➙ fangen
DateTimeException
für ungültige Tag-des-Monats-Reihe.java.Zeit
Den
GregorianCalendar
- Klasse ersetzt worden ist durch dieZonedDateTime
- Klasse als Teil von java.Zeit gebaut in Java 8 und höher. Eine neue Methode wurde Hinzugefügt, um die alte Klasse für die Konvertierung.Du willst ein nur-Datum-Wert, so verwenden Sie
LocalDate
ohne Zeit-von-Tag und ohne Zeitzone.Können Sie extrahieren eine
LocalDate
aus einerZonedDateTime
Zeit.Stellen Sie den Monat durch eine Zahl, mit sane Nummerierung 1-12 für Januar-Dezember.
Oder, besser, verwenden Sie den
Monat
enum-Objekte pre-defined, eine für jeden Monat des Jahres. Tipp: Verwenden Sie dieseMonth
Objekte in Ihrer gesamten Codebasis eher als eine Reine integer-Zahl, um Ihren code mehr selbst dokumentieren, sicherzustellen, gültige Werte und bieten Typ-Sicherheit.Gültigen Wert
In der Dokumentation " LocalDate.von( Jahr , Monat , Tag ) sagt:
So fangen die
DateTimeException
.Schaltjahr
Ja,
LocalDate
überprüft Schaltjahr zu handhaben Februar 29 richtig.Vergleichen Termine
Ich nehme an, du meintest "Aktuelles Datum".
Einer Zeitzone ist entscheidend, ein Datum. Für jeden gegebenen Augenblick, das Datum variiert rund um den Globus durch die zone. Zum Beispiel, ein paar Minuten nach Mitternacht in Paris Frankreich ist ein neuer Tag, während immer noch "gestern" in Montréal Québec.
Wenn keine Zeitzone angegeben ist, wird die JVM implizit gilt die aktuelle Standard-Zeitzone. Diese Standardeinstellung kann in jedem moment ändern, so dass Ihre Ergebnisse können variieren. Besser, geben Sie Ihre gewünschte/erwartete Zeitzone explizit als argument.
Angeben die richtige Zeit zone name im format
continent/region
wieAmerika/Montreal
,Africa/Casablanca
, oderPacific/Auckland
. Verwenden Sie niemals die 3-4 Buchstaben-Abkürzung wieEST
oderIST
wie Sie sind nicht wahr, Zeitzonen, nicht standardisierten und nicht sogar einzigartig(!).Vergleichen mit
isBefore
,isAfter
, undisEqual
.Über java.Zeit
Den java.Zeit framework ist in Java 8 und höher. Diese Klassen verdrängen die lästige alte legacy Datum-Zeit-Klassen wie
java.util.Date
,Calendar
, &" = SimpleDateFormat
.Den Joda-Time Projekt, jetzt in Wartung-Modus, rät der migration auf die java.Zeit Klassen.
Um mehr zu erfahren, siehe die Oracle Tutorial. Und die Suche Stack Overflow für viele Beispiele und Erklärungen. Spezifikation JSR 310.
Mit einem JDBC-Treiber kompatibel mit JDBC 4.2 oder höher verwenden, können Sie exchange java.Zeit Objekte direkt mit Ihrer Datenbank. Keine Notwendigkeit für String oder java.sql.* Klassen.
Wo erhalten Sie die java.Zeit-Klassen?
Den ThreeTen-Extra Projekt erweitert die java.mal mit zusätzlicher Klassen. Dieses Projekt ist ein Testgelände für mögliche künftige Erweiterungen zu java.Zeit. Sie finden möglicherweise einige nützliche Klassen, die hier wie
Interval
,YearWeek
,YearQuarter
, und mehr.