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.

184voto

cletus Punkte 596503

El empfohlen Die Manipulation von Datum/Uhrzeit kann durch die Verwendung eines Calendar Objekt:

Calendar cal = Calendar.getInstance(); // locale-specific
cal.setTime(dateObject);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
long time = cal.getTimeInMillis();

3 Stimmen

@cletus, Ist es möglich, die Zeit aus dem Date-Objekt zu entfernen. Ich möchte reines Datum wie 2008-01-01 ohne Zeitanteil.

2 Stimmen

Ich würde nicht sagen, dass java.util.Calendar empfohlen wird. Sun/Oracle hat diese Klasse in Java 8 durch das neue java.time-Paket ersetzt. Verwenden Sie entweder das oder Joda-Time.

3 Stimmen

Der Kalender wird nicht mehr empfohlen. Siehe stackoverflow.com/a/28868089/40064 wenn Sie Java 8 verwenden.

167voto

A_M Punkte 7435

Haben Sie sich die DateUtils truncate-Methode in Apache Commons Lang?

Date truncatedDate = DateUtils.truncate(new Date(), Calendar.DATE);

wird das Zeitelement entfernt.

10 Stimmen

Erneut aktualisierter Link (komm schon, Apache, hör auf, deine Dokumente zu verschieben!)

6 Stimmen

Der Nachteil dieses Ansatzes ist, dass die Zeitzone, in der die Trunkierungsoperation durchgeführt wird, immer die lokale PC-Zeitzone ist. Wenn Sie also mit Kalendern und Daten in der UTC-Zeitzone oder in einer anderen Zeitzone als der lokalen Zeitzone arbeiten, kann das Datum nicht wie vorgesehen abgeschnitten werden.

0 Stimmen

Wie @Cloud schon sagte, macht mich die Tatsache, dass ich die Kalenderinstanz hier nicht sehe (ich habe keine Kontrolle darüber), ein wenig nervös :)

47voto

Adam Berry Punkte 421

Nur ein kurzes Update in Anbetracht der java.time Klassen, die jetzt in Java 8 und höher integriert sind.

LocalDateTime hat eine truncatedTo Methode, die das, worüber Sie hier sprechen, wirksam angeht:

LocalDateTime.now().truncatedTo(ChronoUnit.MINUTES)

Damit wird die aktuelle Zeit nur in Minuten ausgedrückt:

2015-03-05T11:47

Sie können eine ChronoUnit (oder ein TemporalUnit ) kleiner als DAYS, um die Trunkierung durchzuführen (da die Trunkierung nur auf den Zeitteil von LocalDateTime angewendet wird, nicht auf den Datumsteil).

4 Stimmen

Sie können nur ChronoUnits bis zu DAYS verwenden - höhere Einheiten lösen eine Ausnahme aus.

41voto

Brian Agnew Punkte 260470

Haben Sie sich angesehen Joda ? Es ist ein viel eine einfachere und intuitivere Möglichkeit, mit Daten und Zeiten zu arbeiten. Zum Beispiel können Sie trivial konvertieren zwischen (sagen wir) LocalDateTime y LocalDate Objekte.

z. B. (zur Veranschaulichung der API)

LocalDate date = new LocalDateTime(milliseconds).toLocalDate()

Zusätzlich löst es einige Thread-Sicherheitsprobleme mit Datums-/Zeitformatierern und ist für die Arbeit mit Datums-/Zeitproblemen in Java sehr zu empfehlen.

12 Stimmen

Ich glaube, das tut sie. Es ist eine Empfehlung, eine bessere Bibliothek zu verwenden, anstatt mit den kaputten java.util-Klassen zu kämpfen (wie aus der Frage hervorgeht)

10 Stimmen

Natürlich, Joda ist DIE Bibliothek für Datum, Zeit und Kalendermanipulation in Java. Es wäre eine Pflichtvergessenheit, sie nicht zu empfehlen.

0 Stimmen

Ich muss gestehen, dass ich ein wenig überrascht war, dass niemand anderes dies erwähnt hat. Danke, dass Sie das betont haben.

27voto

jitter Punkte 52721
Date date = new Date();
Calendar cal = Calendar.getInstance();
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);
date = cal.getTime();

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