Wie man Teil des Datums (entsorgen Sie den Teil der Zeit) von java.util.Datum?
Will ich vergleichen die date-Teil von zwei java.util.Date
Objekte. Wie kann ich das erreichen? Ich bin nicht auf der Suche nach vergleichen das Datum, den Monat und das Jahr separat.
Vielen Dank im Voraus!
- danke für das Bearbeiten, Charles 🙂
- Ich habe eine ähnliche Frage beantwortet unter: stackoverflow.com/questions/1363307/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen
Date
ist nur ein Augenblick in der Zeit. Es nur wirklich "bedeutet" etwas in Bezug auf ein Datum, wenn Sie einen Kalender und die Zeitzone zu. Als solche, sollten Sie wirklich sein Blick aufCalendar
, wenn Sie wollen stick in die standard-Java-API - erstellen Sie eineCalendar
Objekt mit der rechtenDate
und Zeitzone einstellen und dann die Komponenten auf 0.Allerdings wäre es schöner zu verwenden Joda Time, mit zu beginnen, und seine
LocalDate
geben, die genauer reflektiert, was Sie interessiert sind in.setTime()
Methode. Das war die unvermeidliche Ursache des Problems. Auch die compare-Funktion bin ich mit dem Datum hat als seine Parameter und nicht Kalender. So, brauchte etwas zu tun mit Terminen. Jedenfalls, vielen Dank!Commons-lang DateUtils bieten eine schöne Lösung für dieses problem:
sehen Sie dieses
Mit diesem können Sie vergleichen zwei
Date
- Instanzen in einer einzigen Zeile, aus den Augen zu verlieren, dass jeder Teil derDate
Sie wollen.In diesem Beispiel ist der Wert von
compareTo
ist 0.Verwenden
Kalender.set()
mitKalender.HOUR_OF_DAY
,Kalender.MINUTE
,Kalender.ZWEITE
undKalender.MILLISEKUNDE
, um alle Felder auf 0.Antworten auf diese doppelte Frage nützlich sein wird: Das zurücksetzen der Zeit-Teil einer timestamp in Java
java.sql.*
PaketUnten finden Sie eine Lösung, die mit Joda Zeit und unterstützt Zeitzonen.
So erhalten Sie das Datum und die Uhrzeit (in
currentDate
undcurrentTime
) im aktuell eingestellten Zeitzone der JVM.Bitte beachten Sie, dass Joda Time nicht unterstützt Schaltsekunden. Du kannst also etwa 26 oder 27 Sekunden aus dem wahren Wert. Dies wird wahrscheinlich nur dann gelöst werden, in den nächsten 50 Jahren, wenn die akkumulierten Fehler, die näher an 1 min und die Leute werden sich darum kümmern.
Siehe auch: https://en.wikipedia.org/wiki/Leap_second
tl;dr
Vermeiden legacy-Datum-Zeit-Klassen
Sind Sie mit lästigen alten legacy-Datum-Zeit-Klassen. Um Sie zu vermeiden.
Stattdessen java.Zeit Klassen. Diese verdrängen die alten Klassen sowie die Joda-Time-Bibliothek.
Konvertieren
Konvertieren Sie Ihre
java.util.Date
zu einemInstant
.Den
Instant
Klasse repräsentiert einen moment auf der Zeitachse, UTC mit einer Auflösung von Nanosekunden.Zeitzone
Anwenden einer Zeitzone. Zeitzone ist entscheidend. Für jeden gegebenen Augenblick, das Datum variiert rund um den Globus durch die zone. Zum Beispiel, ein paar Minuten nach der Mitternacht in Paris Frankreich ist ein neuer Tag aber auch nicht "gestern" in Montréal, Québec.
Anwenden
ZoneId
zu bekommenZonedDateTime
Objekt.Local…
ArtenDen
LocalDate
Klasse repräsentiert einen nur-Datum-Wert ohne Zeit-von-Tag und ohne Zeitzone. Ebenso dieLocalTime
stellt eine Uhrzeit ohne Datum und ohne Uhrzeit zone. Sie können sich diese als zwei Komponenten, die zusammen mit einemZoneId
machen einenZonedDateTime
. Sie können diese extrahieren aus einerZonedDateTime
.Strings
Wenn Ihr Ziel ist lediglich die Erzeugung von Strings für die Darstellung für den Benutzer entfällt die Notwendigkeit, die
Local…
Arten. Verwenden Sie stattdessenDateTimeFormatter
zu generieren Zeichenfolgen, die nur den date-Teil oder der Zeit-Teil. Diese Klasse ist intelligent genug, um automatisch lokalisieren bei der Generierung der Zeichenfolge.Angeben
Locale
, um zu bestimmen, a) die menschliche Sprache für die übersetzung der Namen von Tag, name des Monats, und wie, und (b) die kulturellen Normen für die Entscheidung, Themen wie Abkürzung, groß-und Kleinschreibung, Satzzeichen und so.Über java.Zeit
Den java.Zeit framework ist in Java 8 und höher. Diese Klassen verdrängen die alten lästige Datum-Zeit-Klassen wie
java.util.Date
,.Calendar
, &java.text.SimpleDateFormat
.Den Joda-Time Projekt, jetzt in Wartung-Modus, rät migration nach java.Zeit.
Um mehr zu erfahren, siehe die Oracle Tutorial. Und die Suche Stack Overflow für viele Beispiele und Erklärungen.
Viel von java.Funktionalität ist zurück-portiert auf Java 6 & 7 in ThreeTen-Backport und weiter angepasst werden, um Android in ThreeTenABP (siehe die How to use...).
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.