So vergleichen Sie zwei Daten zusammen mit der Uhrzeit in Java

Lesezeit: 4 Minuten

So vergleichen Sie zwei Daten zusammen mit der Uhrzeit in
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

  • mögliches Duplikat von Wie vergleiche ich Daten in Java?

    – Basilikum Bourque

    19. Oktober 2014 um 18:51 Uhr

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.

  • Kann ich irgendwie die Dauer bekommen. Etwa 2 Tage oder 16 Stunden … so etwas mit dem comapreTo Methode?

    – Praxmon

    23. Februar 2015 um 11:03 Uhr

  • @PrakharMohanSrivastava nein kannst du nicht; Sie müssen die Millisekunden unterscheiden. Sie können verwenden TimeUnit um Ihnen später zu helfen, die resultierende Differenz zu “fraktionieren”.

    – fg

    23. Februar 2015 um 11:16 Uhr

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) 

1647173227 657 So vergleichen Sie zwei Daten zusammen mit der Uhrzeit in
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!");
}

1647173227 447 So vergleichen Sie zwei Daten zusammen mit der Uhrzeit in
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

997500cookie-checkSo vergleichen Sie zwei Daten zusammen mit der Uhrzeit in Java

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy