135 Stimmen

Java Date Informationen zur Sperrzeit

Ich habe ein Java-Date-Objekt, das Datums- und Zeitinformationen enthält. Ich möchte eine Methode schreiben, die die Zeitinformationen abschneidet und die Stunden-Minuten-Sekunden abkürzt, so dass nur noch das Datum übrig bleibt.

Beispiel Eingabe:

2008-01-01 13:15:00

Erwartetes Ergebnis:

2008-01-01 00:00:00

Haben Sie einen Tipp? Ich habe versucht, etwas Ähnliches zu tun:

(timestamp / (24 * 60 * 60 * 1000)) * (24 * 60 * 60 * 1000)

aber ich bin auf Probleme mit der Zeitzone gestoßen.

6voto

m190 Punkte 321

Einfach clear() redundante Felder.

Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.clear(Calendar.MINUTE);
calendar.clear(Calendar.SECOND);
calendar.clear(Calendar.MILLISECOND);
Date truncatedDate = calendar.getTime();

Ab Java 8 ist eine bessere Option die Verwendung von truncatedTo Methode der LocalDateTime , z.B.:

LocalDateTime.now().truncatedTo(ChronoUnit.DAYS)

0 Stimmen

Das funktioniert nicht, denn calendar.clear(Calendar.HOUR_OF_DAY); keine Stunden ab. Die Lösung von @cletus funktioniert gut.

0 Stimmen

Entschuldigung, Sie haben recht, ich habe es korrigiert, für Stunden sollten Sie den Wert einstellen. Im Allgemeinen ist es fast die gleiche Art und Weise, wie man das Datum abschneidet...

5voto

Sunil Manheri Punkte 2245

Aus java.util.Date JavaDocs:

Die Klasse Date stellt einen bestimmten Zeitpunkt mit Millisekundengenauigkeit dar

und aus den java.sql.Date JavaDocs:

Um mit der Definition von SQL DATE übereinzustimmen, müssen die Millisekundenwerte, die von einer java.sql.Date-Instanz umschlossen werden, "normalisiert" werden, indem die Stunden, Minuten, Sekunden und Millisekunden in der jeweiligen Zeitzone, mit der die Instanz verbunden ist, auf Null gesetzt werden.

Der beste Ansatz ist also die Verwendung von java.sql.Date, wenn Sie den Zeitteil nicht benötigen

java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis());

und die Ausgabe ist:

java.util.Date : Thu Apr 26 16:22:53 PST 2012
java.sql.Date  : 2012-04-26

3voto

Michael Borgwardt Punkte 334642

Verwenden Sie die Kalender Die Klasse set() Methode zum Setzen der HOUR_OF_DAY, MINUTE, SECOND y MILLISECOND Felder auf Null.

2voto

Sam YC Punkte 9375

Sie können dies tun, um Zeitzonenprobleme zu vermeiden:

public static Date truncDate(Date date) {
    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
    cal.setTime(date);
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    return cal.getTime();
}

Obwohl Java Date Objekt ist der Wert eines Zeitstempels, aber während des Abschneidens wird er in die lokale Zeitzone umgewandelt, so dass Sie einen überraschenden Wert erhalten, wenn Sie einen Wert aus der UTC-Zeitzone erwarten.

0 Stimmen

Die lästigen Calendar y Date Klassen wurden vor Jahren mit dem java.time Klassen, die JSR 310 in Java 8 und höher implementieren. Ihre Verwendung im Jahr 2018 vorzuschlagen, ist ein schlechter Rat.

2voto

Basil Bourque Punkte 256611

Die Frage ist widersprüchlich. Sie fragt nach einem Datum ohne Uhrzeit, zeigt aber ein Beispiel mit einer Uhrzeit von 00:00:00 .

Joda-Time

UPDATE: Die Joda-Time Projekt ist jetzt in Wartungsmodus Das Team rät zur Migration auf den java.time Klassen. Siehe meine andere Antwort für java.time Lösung.

Wenn Sie stattdessen die Tageszeit auf den ersten Moment des Tages setzen wollen, verwenden Sie eine DateTime Objekt auf die Joda-Time-Bibliothek und rufen dessen [withTimeAtStartOfDay](http://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html#withTimeAtStartOfDay()) Methode. Seien Sie sich bewusst, dass der erste Moment vielleicht nicht der richtige ist 00:00:00 wegen der Sommerzeit oder vielleicht wegen anderer Anomalien.

0 Stimmen

Dies ist die endgültige Antwort (vorausgesetzt, dass man Joda Time verwenden kann und will)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X