Datum früher als vor einem Monat

8

Wie überprüft man, ob das angegebene Datum früher ist als vor einem Monat? Was ist der schnellste Algorithmus? Ich muss berücksichtigen, dass verschiedene Monate unterschiedliche Anzahl von Tagen haben.

    
Michał Ziober 15.01.2010, 22:45
quelle

3 Antworten

18

Aktualisierung auf Java 8

Die Klasse LocalDate kann verwendet werden:

%Vor%

Für frühere Versionen würde die Kalender-Klasse funktionieren.

%Vor%

Beispielcode:

%Vor%

Druckt

%Vor%     
OscarRyz 15.01.2010, 22:56
quelle
4

Joda Zeit :

%Vor%     
Vinko Vrsalovic 15.01.2010 23:00
quelle
2

tl; dr

%Vor%

java.time

Der moderne Ansatz verwendet die Klassen java.time und nicht die problematischen Legacy-Klassen wie Date & amp; Calendar .

Heute

Erhalte zuerst das aktuelle Datum. Die Klasse LocalDate repräsentiert einen reinen Datumswert ohne Zeit. des Tages und ohne Zeitzone.

Eine Zeitzone ist entscheidend für die Bestimmung eines Datums. Für jeden Moment variiert das Datum von Zone zu Zone. Zum Beispiel, ein paar Minuten nach Mitternacht in Paris Frankreich ist ein neuer Tag während noch "gestern" in Montréal Québec .

Geben Sie einen richtigen Zeitzonennamen im Format continent/region an, z. B. America/Montreal , Africa/Casablanca oder Pacific/Auckland . Verwenden Sie niemals die Abkürzung für 3-4 Buchstaben wie EST oder IST , da sie keine echten Zeitzonen sind, nicht standardisiert und nicht einmal eindeutig (!).

%Vor%

Berechnung vor einem Monat

Bestimmen Sie als Nächstes das Datum vor einem Monat .

%Vor%

Hier sind die Regeln, die von LocalDate::minusMonths , zitiert aus Java 8 class doc:

  

Diese Methode subtrahiert den angegebenen Betrag in drei Schritten vom Feld "Monate":

     
  1. Subtrahieren Sie die Eingabemonate vom Feld für den Monat des Jahres

  2.   
  3. Überprüfen Sie, ob das resultierende Datum ungültig ist

  4.   
  5. Passen Sie gegebenenfalls den Tag des Monats dem letzten gültigen Tag an

  6.   

Zum Beispiel würde 2007-03-31 minus ein Monat zu dem ungültigen Datum 2007-02-31 führen. Anstatt ein ungültiges Ergebnis zurückzugeben, wird stattdessen der letzte gültige Tag des Monats 2007-02-28 ausgewählt.

Oder vielleicht meinen Sie in Ihren Geschäftsregeln "30 Tage" anstelle eines Kalendermonats.

%Vor%

Eingabe

Sie erhalten ein Datum. Dies sollte als LocalDate -Objekt an Ihren Code übergeben werden.

%Vor%

Wenn Sie von einem String kommen, verwenden Sie die Standardformate ISO 8601 . Suchen Sie für andere Formate Stack Overflow nach DateTimeFormatter class.

%Vor%

Vergleich

Vergleichen Sie jetzt. Rufen Sie die isBefore , isEqual , isAfter Methoden.

%Vor%

Leistung

Was die in der Frage aufgeworfene Frage der Leistung betrifft: Mach dir keine Sorgen. In diesem Monat ist die Berechnung und der Vergleich sehr wahrscheinlich kein Engpass in Ihrer App. Vermeiden Sie vorzeitige Optimierung .

Über java.time

Das Framework java.time ist in Java integriert 8 und später. Diese Klassen ersetzen die problematischen alten Legacy Datum-Uhrzeit-Klassen wie java.util.Date , Calendar , & amp; SimpleDateFormat .

Das Joda-Time Projekt, jetzt in Wartungsmodus , rät Migration zum java.time Klassen.

Weitere Informationen finden Sie im Oracle-Lernprogramm . Und suchen Sie nach Stack Overflow für viele Beispiele und Erklärungen. Spezifikation ist JSR 310 .

Wo erhalten Sie die Klassen java.time?

Das ThreeTen-Extra -Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Erweiterungen von java.time. Hier finden Sie einige nützliche Klassen wie Interval , < a href="http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/YearWeek.html"> YearWeek , YearQuarter und mehr .

    
Basil Bourque 21.08.2017 00:37
quelle

Tags und Links