Ich versuche, ein Datum in einem String-Format mit dem aktuellen Datum zu vergleichen. So habe ich es gemacht (nicht getestet, sollte aber funktionieren), verwende aber veraltete Methoden. Irgendwelche guten Vorschläge für eine Alternative? Vielen Dank.
PS Ich hasse es wirklich, Date-Sachen in Java zu machen. Es gibt so viele Möglichkeiten, dasselbe zu tun, dass Sie wirklich nicht sicher sind, welche die richtige ist, daher meine Frage hier.
String valid_until = "1/1/1990";
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy");
Date strDate = sdf.parse(valid_until);
int year = strDate.getYear(); // this is deprecated
int month = strDate.getMonth() // this is deprecated
int day = strDate.getDay(); // this is deprecated
Calendar validDate = Calendar.getInstance();
validDate.set(year, month, day);
Calendar currentDate = Calendar.getInstance();
if (currentDate.after(validDate)) {
catalog_outdated = 1;
}
Calendar
,SimpleDateFormat
,Date
oder eine der anderen langen veralteten Java Datum und Zeitklassen. Verwenden Sie stattdessenjava.time
die moderne Java-API für Datum und Uhrzeit . Ja, Sie können es auf Android verwenden. Für ältere Android siehe Verwendung von ThreeTenABP in Android Project .Antworten:
Ihr Code könnte auf reduziert werden
oder
quelle
Sie können compareTo () verwenden
quelle
java.util.Date
,java.util.Calendar
undjava.text.SimpleDateFormat
sind jetzt Erbe, durch die verdrängte java.time Klassen. Die meisten Funktionen von java.time werden im ThreeTen-Backport- Projekt auf Java 6 und Java 7 zurückportiert . Weiter angepasst für früheres Android (<26) in ThreeTenABP . Siehe Verwendung von ThreeTenABP… .Sie können direkt ein erstellen
Calendar
ausDate
:quelle
Beachten Sie, dass das richtige Format ("TT / MM / JJJJ") ist, bevor der Code funktioniert. "mm" bedeutet Minuten!
quelle
quelle
java.util.Date
,java.util.Calendar
undjava.text.SimpleDateFormat
sind jetzt Erbe, durch die verdrängte java.time Klassen. Die meisten Funktionen von java.time werden im ThreeTen-Backport- Projekt auf Java 6 und Java 7 zurückportiert . Weiter angepasst für früheres Android (<26) in ThreeTenABP . Siehe Verwendung von ThreeTenABP… .es gibt true zurück .. und Sie können auch vor und gleich mit Hilfe von date.before und date.equal überprüfen.
quelle
Vergleicht die von diesem Kalender dargestellte Zeit mit der durch den angegebenen Kalender dargestellten Zeit.
Gibt 0 zurück, wenn die Zeiten der beiden Kalender gleich sind, -1, wenn die Zeit dieses Kalenders vor der anderen liegt, 1, wenn die Zeit dieses Kalenders nach der anderen liegt.
quelle
Konvertieren Sie das Datum in Kalender und führen Sie dort Ihre Berechnungen durch. :) :)
Oder:
quelle
Zeit für die moderne Antwort.
java.time und ThreeTenABP
Als ich diesen Code gerade ausführte, war die Ausgabe:
Da es in allen Zeitzonen nie dasselbe Datum ist, geben Sie eine explizite Zeitzone an
LocalDate.now
. Wenn Sie möchten, dass der Katalog in allen Zeitzonen gleichzeitig abläuft, können Sie angeben,ZoneOffset.UTC
solange Sie Ihre Benutzer darüber informieren, dass Sie UTC verwenden.Ich verwende java.time, die moderne Java-API für Datum und Uhrzeit. Die Datum-Zeit - Klassen, die verwendet wird ,
Calendar
,SimpleDateFormat
undDate
sind alle schlecht konzipiert und zum Glück lange überholt. Auch trotz des NamensDate
repräsentiert a kein Datum, sondern einen Zeitpunkt. Eine Konsequenz daraus ist: Obwohl heute der 15. Februar 2019 ist, ist ein neu erstelltesDate
Objekt bereits nach einemDate
Objekt aus dem Parsen (also nicht gleich)15/02/2019
. Dies verwirrt einige. Im Gegensatz dazu ist die ModerneLocalDate
ein Datum ohne Tageszeit (und ohne Zeitzone), sodass zweiLocalDate
s, die das heutige Datum darstellen, immer gleich sind.Frage: Kann ich java.time unter Android verwenden?
Ja, java.time funktioniert gut auf älteren und neueren Android-Geräten. Es erfordert nur mindestens Java 6 .
org.threeten.bp
Zeitklassen mit Unterpaketen importieren.Links
java.time
zuerst beschrieben wurde.java.time
Java 6 und 7 (ThreeTen für JSR-310).quelle
Sie könnten dies versuchen
und Sie könnten verwenden
today.getTime()
, um Wert abzurufen und zu vergleichen.quelle
Manchmal müssen wir eine Liste mit Daten erstellen, wie z
heute mit Stunde
gestern mit gestern
andere Tage mit 23/06/2017
Dazu müssen wir die aktuelle Zeit mit unseren Daten vergleichen.
Sie können dieses Beispiel auch in GitHub und in diesem Beitrag überprüfen .
quelle
Update: Die Joda-Time- Bibliothek befindet sich jetzt im Wartungsmodus und empfiehlt die Migration auf das darauf folgende Java.time- Framework. Siehe die Antwort von Ole VV .
Joda-Zeit
Die Klassen java.util.Date und .Calendar sind notorisch problematisch. Vermeide sie. Verwenden Sie entweder Joda-Time oder das neue Paket java.time in Java 8.
LocalDate
Wenn Sie nur ein Datum ohne Uhrzeit wünschen, verwenden Sie die LocalDate-Klasse.
Zeitzone
Das Abrufen des aktuellen Datums hängt von der Zeitzone ab. Ein neues Datum rollt in Paris vor Montréal. Geben Sie die gewünschte Zeitzone an, anstatt von der Standardeinstellung der JVM abzuhängen.
Beispiel in Joda-Zeit 2.3.
quelle
Sie können validDate.setTime (strDate) verwenden. Sehen Sie sich das Javadoc unter http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html an
quelle
quelle
In Kotlin können Sie Daten einfach mit Vergleichsoperatoren vergleichen. Weil Kotlin bereits das Überladen von Bedienern unterstützt. So vergleichen Sie Datumsobjekte:
und wenn Sie Kalenderobjekte verwenden, können Sie diese leicht vergleichen:
quelle