Ändern des Java-Datums um eine Stunde zurück

Lesezeit: 4 Minuten

Benutzer-Avatar
Makki

Ich habe ein Java-Datumsobjekt:

Date currentDate = new Date();

Dadurch werden das aktuelle Datum und die Uhrzeit angezeigt. Beispiel:

Thu Jan 12 10:17:47 GMT 2012

Stattdessen möchte ich das Datum abrufen und es auf eine Stunde zurücksetzen, sodass es mir Folgendes geben sollte:

Thu Jan 12 09:17:47 GMT 2012

Was wäre der beste Weg, es zu tun?

  • gibt es irgendwelche mktime Äquivalent in Java? 60 Minuten davon abziehen?

    – Shiplu Mokadim

    12. Januar 2012 um 10:21 Uhr

Benutzer-Avatar
Kimi

java.util.Calendar

Calendar cal = Calendar.getInstance();
// remove next line if you're always using the current time.
cal.setTime(currentDate);
cal.add(Calendar.HOUR, -1);
Date oneHourBack = cal.getTime();

java.util.Date

new Date(System.currentTimeMillis() - 3600 * 1000);

org.joda.time.LocalDateTime

new LocalDateTime().minusHours(1)

Java 8: java.time.LocalDateTime

LocalDateTime.now().minusHours(1)

Java 8 java.time.Instant

// always in UTC if not timezone set
Instant.now().minus(1, ChronoUnit.HOURS));
// with timezone, Europe/Berlin for example
Instant.now()
       .atZone(ZoneId.of("Europe/Berlin"))
       .minusHours(1));

  • Beachten Sie einfach, dass es Calendar.HOUR gibt, das mit der 12-Stunden-Uhr funktioniert, und Calendar.HOUR_OF_DAY für die 24-Stunden-Uhr: chintat.blogspot.ca/2006/05/…

    – Wolf

    27. April 2015 um 17:24 Uhr

  • Würde die erste Lösung mit Kalender funktionieren, wenn es Mitternacht an einem Tag ist und Sie eine Stunde früher wollen, also 23 Uhr am Vortag?

    – Georg Arokiam

    28. September 2018 um 14:51 Uhr

  • @GeorgeArokiam ja, das würde es

    – Kimi

    1. Oktober 2018 um 14:00 Uhr

  • Woow! Dies ist eine perfekte Kurzantwort für die meisten Alternativen.

    – 4xMafole

    2. September 2021 um 21:35 Uhr

Benutzer-Avatar
Peter Lawrey

Ähnlich der Lösung von @Sumit Jain

Date currentDate = new Date(System.currentTimeMillis() - 3600 * 1000);

oder

Date currentDate = new Date(System.currentTimeMillis() - TimeUnit.HOURS.toMillis(1));

  • Viel bessere Lösung. Die Erstellung von Kalenderinstanzen sieht in dieser speziellen Anwendung wie ein Overkill aus.

    – Löwe

    26. Dezember 2013 um 10:22 Uhr

  • @cosmolev Calendar ist in den meisten Beispielen, die ich finde, übertrieben.

    – Peter Lawrey

    26. Dezember 2013 um 10:39 Uhr

  • @Stoan Ich habe ein besser lesbares Beispiel hinzugefügt. Sie sollten beachten, dass der Kalender unglaublich ineffizient ist.

    – Peter Lawrey

    19. Januar 2016 um 13:53 Uhr

  • @PeterLawrey Date currentDate = new Date(System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(10)); Dies sollte 10 Minuten hinterher sein?

    – Siya Sosibo

    19. Januar 2016 um 14:06 Uhr

Benutzer-Avatar
Basil Bourque

tl;dr

Im koordinierte Weltzeit:

Instant.now().minus( 1 , ChronoUnit.HOURS ) 

Oder zoniert:

Instant.now()
       .atZone( ZoneId.of ( "America/Montreal" ) )
       .minusHours( 1 )

Verwenden von java.time

Java 8 und höher hat das neue java.time Rahmen eingebaut.

Instant

Wenn Sie sich nur für UTC (GMT) interessieren, verwenden Sie die Instant Klasse.

Instant instant = Instant.now ();
Instant instantHourEarlier = instant.minus ( 1 , ChronoUnit.HOURS );

Dump auf Konsole.

System.out.println ( "instant: " + instant + " | instantHourEarlier: " + instantHourEarlier );

sofort: 2015-10-29T00:37:48.921Z | instantHourEarlier: 2015-10-28T23:37:48.921Z

Beachten Sie, wie in diesem Augenblick zum gestrigen Datum zurückgesprungen ist.

ZonedDateTime

Wenn Ihnen eine Zeitzone wichtig ist, verwenden Sie die ZonedDateTime Klasse. Sie können mit einem Instant beginnen und dem eine Zeitzone zuweisen, a ZoneId Objekt. Diese Klasse behandelt die notwendigen Anpassungen für Anomalien wie z Sommerzeit (DST).

Instant instant = Instant.now ();
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
ZonedDateTime zdtHourEarlier = zdt.minus ( 1 , ChronoUnit.HOURS );

Dump auf Konsole.

System.out.println ( "instant: " + instant + "\nzdt: " + zdt + "\nzdtHourEarlier: " + zdtHourEarlier );

sofort: 2015-10-29T00:50:30.778Z

zdt: 2015-10-28T20:50:30.778-04:00[America/Montreal]

zdtHourEarlier: 2015-10-28T19:50:30.778-04:00[America/Montreal]

Wandlung

Die alten java.util.Date/.Calendar-Klassen sind jetzt veraltet. Vermeide sie. Sie sind notorisch lästig und verwirrend.

Wenn Sie die alten Klassen für den Betrieb mit altem Code verwenden müssen, der für die java.time-Typen noch nicht aktualisiert wurde, rufen Sie die Konvertierungsmethoden auf. Hier ist ein Beispielcode, der von einem Instant oder einem ZonedDateTime zu einem java.util.Date geht.

java.util.Date date = java.util.Date.from( instant );

…oder…

java.util.Date date = java.util.Date.from( zdt.toInstant() );

Um java.time

Das java.time Framework ist in Java 8 und höher integriert. Diese Klassen ersetzen die lästigen alten Erbe Datum-Zeit-Klassen wie z java.util.Date, Calendar& SimpleDateFormat.

Das Joda-Zeit Projekt, jetzt in Wartungsmodusrät zur Migration in die java.time Klassen.

Weitere Informationen finden Sie unter Oracle-Tutorial. Und durchsuchen Sie Stack Overflow nach vielen Beispielen und Erklärungen. Spezifikation ist JSR310.

Sie dürfen umtauschen java.time Objekte direkt mit Ihrer Datenbank. Verwenden ein JDBC-Treiber gemäß JDBC 4.2 oder später. Keine Notwendigkeit für Saiten, keine Notwendigkeit für java.sql.* Klassen.

Wo erhalte ich die java.time-Klassen?

  • Java SE 8, Java SE 9, JavaSE 10, Java SE 11und höher – Teil der Standard-Java-API mit einer gebündelten Implementierung.
    • Java 9 fügt einige kleinere Funktionen und Korrekturen hinzu.
  • Java SE 6 und Java SE 7
    • Die meisten von den java.time Funktionalität ist zurückportiert auf Java 6 & 7 in ThreeTen-Backport.
  • Android
    • Spätere Versionen von Android-Bundle-Implementierungen der java.time Klassen.
    • Für frühere Android-Versionen (<26) ist die ThreeTenABP Projekt passt ThreeTen-Backport (oben erwähnt). Sehen Wie benutzt man ThreeTenABP….

Das ThreeTen-Extra project erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen zu java.time. Sie können hier einige nützliche Klassen finden, wie z Interval, YearWeek, YearQuarterund mehr.

  • Hallo Sir, ich kann immer noch nicht den richtigen Weg finden, “vorher” für den Instant zu machen.

    – Ticherhaz FreePalestine

    2. Juni 2019 um 19:45 Uhr

Verwenden Kalender.

Calendar cal = Calendar.getInstance();

cal.setTime(new Date());
cal.set(Calendar.HOUR, cal.get(Calendar.HOUR) - 1);

Oder mit dem berühmten Joda-Zeit Bibliothek:

DateTime dateTime = new DateTime();
dateTime = dateTime.minusHours(1);
Date modifiedDate = dateTime.toDate();

Subtrahieren Sie einfach die Anzahl der Millisekunden in einer Stunde vom Datum.

currentDate.setTime(currentDate.getTime() - 3600 * 1000));

Sie können den folgenden Code für Datum und Uhrzeit verwenden:

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
       //get current date time with Calendar()
       Calendar cal = Calendar.getInstance();
       System.out.println("Current Date Time : " + dateFormat.format(cal.getTime()));

       cal.add(Calendar.DATE, 1);
       System.out.println("Add one day to current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.MONTH, 1);
       System.out.println("Add one month to current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.YEAR, 1);
       System.out.println("Add one year to current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.HOUR, 1);
       System.out.println("Add one hour to current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.MINUTE, 1);
       System.out.println("Add one minute to current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.SECOND, 1);
       System.out.println("Add one second to current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.DATE, -1);
       System.out.println("Subtract one day from current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.MONTH, -1);
       System.out.println("Subtract one month from current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.YEAR, -1);
       System.out.println("Subtract one year from current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.HOUR, -1);
       System.out.println("Subtract one hour from current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.MINUTE, -1);
       System.out.println("Subtract one minute from current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.SECOND, -1);
       System.out.println("Subtract one second from current date : " + dateFormat.format(cal.getTime()));

Ausgabe :

Current Date Time : 2008/12/28 10:24:53
Add one day to current date : 2008/12/29 10:24:53
Add one month to current date : 2009/01/28 10:24:53
Add one year to current date : 2009/12/28 10:24:53
Add one hour to current date : 2008/12/28 11:24:53
Add one minute to current date : 2008/12/28 10:25:53
Add one second to current date : 2008/12/28 10:24:54
Subtract one day from current date : 2008/12/27 10:24:53
Subtract one month from current date : 2008/11/28 10:24:53
Subtract one year from current date : 2007/12/28 10:24:53
Subtract one hour from current date : 2008/12/28 09:24:53
Subtract one minute from current date : 2008/12/28 10:23:53
Subtract one second from current date : 2008/12/28 10:24:52

Dieser Link ist gut: Siehe hier

Und sehen : Auch sehen

Und : Hier

Und : Hier

Und : Hier

Wenn Sie nur Zeit brauchen:

DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

  • FYI: Diese Antwort verwendet problematische alte Date-Time-Klassen, die jetzt veraltet sind und durch die modernen java.time-Klassen ersetzt werden.

    – Basilikum Bourque

    25. Oktober 2017 um 15:36 Uhr

1344140cookie-checkÄndern des Java-Datums um eine Stunde zurück

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

Privacy policy