
Benutzer2636874
ich habe zwei Date
Objekte mit dem folgenden Format.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
String matchDateTime = sdf.parse("2014-01-16T10:25:00");
Date matchDateTime = null;
try {
matchDateTime = sdf.parse(newMatchDateTimeString);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// get the current date
Date currenthDateTime = null;
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date dt = new Date();
String currentDateTimeString = dateFormat.format(dt);
Log.v("CCCCCurrent DDDate String is:", "" + currentDateTimeString);
try {
currenthDateTime = sdf.parse(currentDateTimeString);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Jetzt möchte ich die beiden oben genannten Daten zusammen mit der Zeit vergleichen. Wie soll ich in Java vergleichen.
Danke
Seit Date
implementiert Comparable<Date>
es ist so einfach wie:
date1.compareTo(date2);
Als die Comparable
Vertrag festlegt, wird eine negative Ganzzahl/Null/positive Ganzzahl zurückgegeben, wenn date1
gilt als kleiner/gleich/größer als date2
(dh in diesem Fall vorher/gleich/nachher).
Beachten Sie, dass Date
hat auch .after()
und .before()
Methoden, die stattdessen boolesche Werte zurückgeben.
Eine Alternative ist ….
Wandeln Sie beide Daten wie unten in Millisekunden um
Date d = new Date();
long l = d.getTime();
Vergleichen Sie nun beide Long-Werte
Verwenden compareTo()
Rückgabewerte
0, wenn das Argument Date gleich diesem Date ist; ein Wert kleiner als 0, wenn dieses Datum vor dem Date-Argument liegt; und einen Wert größer als 0, wenn dieses Datum nach dem Datumsargument liegt.
Wie
if(date1.compareTo(date2)>0)

MaximeF
Eine Alternative ist Joda-Zeit.
Verwenden Sie DateTime
DateTime date = new DateTime(new Date());
date.isBeforeNow();
or
date.isAfterNow();
// Get calendar set to the current date and time
Calendar cal = Calendar.getInstance();
// Set time of calendar to 18:00
cal.set(Calendar.HOUR_OF_DAY, 18);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
// Check if current time is after 18:00 today
boolean afterSix = Calendar.getInstance().after(cal);
if (afterSix) {
System.out.println("Go home, it's after 6 PM!");
}
else {
System.out.println("Hello!");
}

Ole VV
Die anderen Antworten sind im Allgemeinen richtig und alle veraltet. Verwenden Sie java.time, die moderne Java-API für Datum und Uhrzeit, für Ihre Datums- und Zeitangaben. Mit java.time ist auch Ihre Arbeit viel einfacher geworden im Vergleich zu der Situation, als diese Frage im Februar 2014 gestellt wurde.
String dateTimeString = "2014-01-16T10:25:00";
LocalDateTime dateTime = LocalDateTime.parse(dateTimeString);
LocalDateTime now = LocalDateTime.now(ZoneId.systemDefault());
if (dateTime.isBefore(now)) {
System.out.println(dateTimeString + " is in the past");
} else if (dateTime.isAfter(now)) {
System.out.println(dateTimeString + " is in the future");
} else {
System.out.println(dateTimeString + " is now");
}
Bei der Ausführung im Jahr 2020 lautet die Ausgabe dieses Snippets:
2014-01-16T10:25:00 liegt in der Vergangenheit
Da Ihre Zeichenfolge uns keine Zeitzone oder UTC-Offset mitteilt, müssen wir wissen, was verstanden wurde. Der obige Code verwendet die Zeitzoneneinstellung des Geräts. Verwenden Sie für eine bekannte Zeitzone beispielsweise wie ZoneId.of("Asia/Ulaanbaatar")
. Für UTC angeben ZoneOffset.UTC
.
Ich nutze die Tatsache aus, dass Ihre Zeichenfolge im ISO 8601-Format vorliegt. Die Klassen von java.time analysieren die gängigsten ISO 8601-Varianten, ohne dass wir einen Formatierer angeben müssen.
Frage: Benötigt java.time für die Android-Entwicklung nicht Android API Level 26?
java.time funktioniert sowohl auf älteren als auch auf neueren Android-Geräten gut. Es erfordert nur mindestens Java6.
- In Java 8 und höher und auf neueren Android-Geräten (ab API-Level 26) ist die moderne API integriert.
- In Nicht-Android-Java 6 und 7 erhalten Sie den ThreeTen-Backport, den Backport der modernen Klassen (ThreeTen für JSR 310; siehe die Links unten).
- Verwenden Sie auf (älterem) Android die Android-Edition von ThreeTen Backport. Es heißt ThreeTenABP. Und stellen Sie sicher, dass Sie die Datums- und Zeitklassen importieren
org.threeten.bp
mit Unterpaketen.
Verknüpfungen
9975000cookie-checkSo vergleichen Sie zwei Daten zusammen mit der Uhrzeit in Javayes
mögliches Duplikat von Wie vergleiche ich Daten in Java?
– Basilikum Bourque
19. Oktober 2014 um 18:51 Uhr