Wie um zu überprüfen, ob zu einem bestimmten Datum übergeben wird
Ich habe einen string der form "mm/JJJJ", und ich möchte um es zu vergleichen gegen das Datum des lokalen Systems.
Ich dachte daran, entweder mithilfe einer umrechnungstabelle zwischen mein Monat und das Feld für den MONAT im Kalender, so etwas wie:
Calendar cal = Calendar.getInstance();
String date = "07/2014";
String month = date.subString(0, 2);
int monthToCompare;
if (month.equals("01"))
monthToCompare = cal.JANUARY;
if (month.equals("02"))
monthToCompare = cal.FEBRUARY;
...
Und dann manuell vergleichen mit einer wenn. Ich mag es nicht, weil ich denke, dass ist viel zu lange für so eine einfache Bedienung.
Die andere Möglichkeit, die ich gedacht habe, der wird immer der aktuelle Date()
und mit der before()
Methode. Das würde bedeuten, dass die übersetzung von Datum zu Datum-format, aber der einfache Methoden, um es zu tun, sind veraltet, ich muss geben Sie die Anzahl der Millisekunden an, und ich weiß nicht, wie zu tun leicht, dass (unter Berücksichtigung der Schaltjahre, Kalender-Korrekturen und so weiter, die seit 1970).
Haben Sie sah DateFormat.parse()?
Duplizieren: Java-string zu Datum-Konvertierung
FYI, ist die lästige alte Datum-Zeit-Klassen wie
java.util.Date
, java.util.Calendar
, und java.text.SimpleDateFormat
sind jetzt legacy, überlagert von der java.Zeit Klassen gebaut in Java 8 & Java 9. Siehe Tutorial von Oracle. Tipp: YearMonth
Klasse.Re-opening, wie ich bemerkte, die Frage ist hier, startet mit nur einer Jahr-Monat eher als ein Datum. Anders die Duplikate markiert.
InformationsquelleAutor user2891462 | 2014-06-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
@Mifmif Antwort, die ich endlich das problem gelöst mit:
InformationsquelleAutor
Versuchen Sie dies :
InformationsquelleAutor
tl;dr
java.Zeit
Die moderne Lösung verwendet die java.Zeit Klassen eher als lästigen alten Datum-Zeit-Klassen.
Jahr & Monat nur
Repräsentieren einen ganzen Monat, verwenden Sie die
YearMonth
Klasse.Tipp: Verwenden Sie solche
YearMonth
Objekte in Ihrer gesamten Codebasis eher als eine bloße Zeichenkette. Und wenn Sie tun einen string benötigen, um exchange-Daten verwenden Sie standard - ISO 8601 format:YYYY-MM
. Die java.Zeit-Klassen verwenden standard-Formate, die standardmäßig beim Parsen/generieren von Zeichenfolgen, so dass keine Notwendigkeit zu definieren, formatieren Muster.Aktuellen Jahr-Monat
Ermittlung der aktuellen Jahr-Monat bedeutet, dass die Ermittlung des aktuellen 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(!).Wenn Sie möchten, verwenden Sie die JVM die aktuelle Standard-Zeit-zone, fordern Sie es und übergeben Sie als argument. Wenn weggelassen, wird die JVM ist der aktuelle Standard angewendet wird, implizit. Besser zu explizit sein, wie die Standardeinstellung kann geändert werden, in jedem moment während der Laufzeit von jedem code in jedem thread von jeder app innerhalb der JVM.
Gleiche Idee gilt immer die aktuelle
YearMonth
: übergeben wird einZoneId
.Vergleichen
Vergleichen mit Methoden
isBefore
,isAfter
, undequals
.Über java.Zeit
Den java.Zeit framework ist in Java 8 und höher. Diese Klassen verdrängen die lästige alte Vermächtnis Datum-Zeit-Klassen wie
java.util.Date
,Calendar
, &" = SimpleDateFormat
.Den Joda-Time Projekt, jetzt in Wartungsmodus, 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.
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.InformationsquelleAutor
SimpleDateFormat
Klasse. Zumindest nicht als erste option. Und nicht ohne VORBEHALT. Heute haben wir so viel besser injava.time
die moderne Java-Datums-und Zeit-API und seineDateTimeFormatter
. Ja, Sie können es verwenden, auf Android. Für ältere Android finden Sie unter Wie zu verwenden ThreeTenABP im Android-Projekt.Für mich " = SimpleDateFormat mit dem Datum funktioniert Super. Ich hatte sehr schlechte Erfahrung mit dem Kalender. Auf einigen Geräten die Termine, wo noch verrückt mit dem Kalender.
InformationsquelleAutor