Java: überprüfen Sie, ob ein bestimmtes Datum innerhalb des aktuellen Monats
Ich brauche, um zu überprüfen, ob ein gegebenes Datum fällt in den aktuellen Monat, und ich schrieb Sie den folgenden code, aber der IDE erinnerte mich daran, dass die getMonth()
und getYear()
Methoden sind veraltet. Ich Frage mich, wie das gleiche zu tun, in neueren Java 7 oder Java 8.
private boolean inCurrentMonth(Date givenDate) {
Date today = new Date();
return givenDate.getMonth() == today.getMonth() && givenDate.getYear() == today.getYear();
}
Lesen Sie die JavaDoc für jede Methode, es sagt Ihnen, was Sie verwenden sollten, statt. (Spoiler für Java 7:
Calendar.get(Calendar.MONTH)
und Calendar.get(Calendar.YEAR)
)InformationsquelleAutor TonyGW | 2014-11-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zeitzone
Die anderen Antworten Ignoriere das entscheidende Problem der Zeitzone. Ein neuer Tag dämmert früher in Paris als in Montréal. Also an der gleichen gleichzeitiger moment die Daten unterschiedlich sind, "morgen" in Paris, während "gestern" in Montréal.
Joda-Time
Java.util.Datum und .Kalender-Klassen gebündelt mit Java sind notorisch lästig, unübersichtlich und fehlerhaft. Um Sie zu vermeiden.
Stattdessen Joda-Time Bibliothek oder java.time package in Java 8 (inspiriert von Joda-Time).
Hier ist der Beispiel-code in Joda-Time-2.5.
Für eine Allgemeine Lösung zu sehen, wenn Sie einen moment fällt innerhalb einer beliebigen Zeitspanne (nicht nur für einen Monat), suchen Sie StackOverflow für "joda" und "Intervall" und "enthalten".
InformationsquelleAutor Basil Bourque
InformationsquelleAutor Yusuf Kapasi
java.Zeit (Java 8)
Gibt es mehrere Möglichkeiten, es zu tun mit der neuen java.Zeit API (tutorial). Kann man es mit
.get(ChronoField.XY)
, aber ich denke, das ist schöner:Zur besseren re-usability können Sie auch umgestalten, diesen code zu "zeitliche Abfrage":
YearMonth ref = YearMonth.aus(LocalDate.jetzt()); return Monat.aus der(zeitlichen) == Monat.aus(ref) && Jahr.von(zeitlich).equals(Jahr.aus(ref)); verwenden Sie bitte YearMonth für ref.
InformationsquelleAutor viktor
Soweit ich weiß, den Kalender Klasse und allen daraus abgeleiteten Rückkehr das Datum mit get(). Finden Sie die die Dokumentation für diese Klasse. Auch hier ist ein Beispiel, genommen von hier:
welche Ausgänge
Ich denke, es wurde ersetzt, weil der neue Weg bietet eine viel einfachere Handhabung mit einer einzigen Funktion, die ist viel leichter zu merken.
InformationsquelleAutor rbaleksandar
java.Zeit (Java 8)
Java 8 bietet die
YearMonth
Klasse, die für einen bestimmten Monat in einem bestimmten Jahr (z.B. Januar 2018). Dies kann verwendet werden, um zu vergleichen, gegen dieYearMonth
des angegebenen Datums.Beachten Sie, dass dieser Ansatz funktioniert für jede von Java 8 Zeit-Klassen, die haben beide einen Monat und ein Datum Teil (
LocalDate
,ZonedDateTime
usw.) und nicht nurLocalDateTime
.LocalDateTime
ist irreführend. Die Klasse nicht repräsentieren einen moment. Besser zu ersetzen mitZonedDateTime
, sonst halten Sie Ihren code, den gleichen.Sollten Sie eine Erwähnung zu erklären, die Verwendung von
ZoneId
für alles, was Zeit-zone angemessen ist, um den business-Szenario.Über meine vorhandenen
// Use whichever time zone makes sense for your use case
Kommentar?Gut. Ich schlage immer noch einbauen
ZonedDateTime
mitLocalDateTime
. Ihre aktuelle code-Lösung passiert, zu arbeiten, für diesen einen bestimmten Fall, es ist irreführend und verwirrend. Und jemand erweitern, der code kann es zu fehlerhaften Ergebnissen durch die VerwendungLocalDateTime
stattZonedDateTime
.Ich bin nicht zu sehen, wo die
LocalDateTime
könnte ein problem werden. Wirklich, wir haben nur Sorge, dass es eines der Java 8 Typen, beide ein Jahr und einen Monat, und wir verwenden die gleiche zone für das Datum-Konvertierung und die Bestimmung des aktuellen Monats.LocalDateTime.ofInstant
wird uns das gewünschte Jahr und den Monat, für den jeweiligen Zeitpunkt (sowie Datum & Zeit, die wir eigentlich gar nicht interessieren). Wenn es eine direkt-Konvertierung vonInstant
zuYearMonth
ich würde verwendet haben, statt.InformationsquelleAutor M. Justin