Ich wollte eine Prüfung vor und nach dem Einstellungsdatum und dem Einstellungsdatum durchführen, also habe ich mit GregorianCalendar (einer konkreten Unterklasse des Kalenders) ein Datumsobjekt wie folgt erstellt und es mit compareTo verglichen.
dateCheck.java
Date march = new GregorianCalendar(2019,3,31).getTime(); //31. März 2019(Tag)
Date april = new GregorianCalendar(2019,4,1).getTime(); //01. April 2019(Mond)
System.out.println(march.compareTo(april)); //Ausführungsergebnis: 0
Der Rückgabewert der compareTo-Methode (Vergleich des Zeitwerts, der durch die beiden Kalenderobjekte dargestellt wird (Versatz in Millisekunden gegenüber dem ursprünglichen Zeitraum)) -Referenzobjekt <Argumentobjekt → Wert kleiner als 0 -Referenzobjekt> Argumentobjekt → Wert größer als 0 -Referenzobjekt = Argumentobjekt → 0
Da die seit der Referenzzeit verstrichene Millisekunde am 1. April größer ist als am 31. März (das Datum liegt später), ist es wünschenswert, einen Wert kleiner als 0 zurückzugeben. ** Aber das Ergebnis ist 0 (gleich). ** ** **
Versuchen Sie, zwei Datumsobjekte an die Konsole auszugeben.
Wed May 01 00:00:00 JST 2019
Wed May 01 00:00:00 JST 2019
Beide sind Mittwoch, 1. Mai 2019. Ich habe hier "Ah" bemerkt.
Ich habe das komplett vergessen. Mit anderen Worten, das Datum wird in ** 31. März → 31. April und 1. April → 1. Mai ** umgewandelt. Der 31. April existiert nicht, aber es scheint, dass er nur nach der verstrichenen Millisekunde ohne ein solches Problem beurteilt wird.
Wenn Sie also den Wert minus 1 auf den Monat setzen, wird er ordnungsgemäß konvertiert, wie Sie möchten.
dateCheck.java
Date march = new GregorianCalendar(2019,2,31).getTime(); //Ausführungsergebnis: So 31. März 00:00:00 JST 2019
Date april = new GregorianCalendar(2019,3,1).getTime(); //Ausführungsergebnis: Mo Apr 01 00:00:00 JST 2019
System.out.println(march.compareTo(april)); //Ausführungsergebnis:-1
Übrigens, wenn Sie sich die [Referenz] ansehen (https://docs.oracle.com/javase/jp/8/docs/api/java/util/Calendar.html), verwendet der Kalender * bei der Interpretation von Kalenderfeldern. * Es scheint zwei Modi zu verwenden, streng und nicht streng **.
Strenger Modus: Kalender löst eine Ausnahme aus, wenn im Kalenderfeld eine Nichtübereinstimmung vorliegt Nicht strenger Modus: Der Kalender akzeptiert einen größeren Bereich von Kalenderfeldwerten als er erzeugt
Standardmäßig befindet es sich im nicht strengen Modus. Wenn Sie jedoch in den strengen Modus wechseln und ein Datum außerhalb des Bereichs festlegen, wird der 31. April nicht akzeptiert.
dateCheck.java
Calendar march = new GregorianCalendar();
Calendar april = new GregorianCalendar();
april.setLenient(false); //Wechseln Sie in den strengen Modus
march.setWeekDate(2019,3,31); //Erfolg
april.setWeekDate(2019,3,31); //Fehler: Java.lang.IllegalArgumentException: invalid dayOfWeek: 31
Wie oben erwähnt, ist es sehr peinlich, aber es kann ein super super Anfänger sein. Ich lasse es in meinem Kopf.
Recommended Posts