Wie sage ich 5 Sekunden ab jetzt in Java?

Lesezeit: 4 Minuten

Ich schaue auf das Datum Dokumentation und versuche herauszufinden, wie ich JETZT + 5 Sekunden ausdrücken kann. Hier ist etwas Pseudocode:

import java.util.Date
public class Main {

    public static void main(String args[]) {
         Date now = new Date();
         now.setSeconds(now.getSeconds() + 5);
    }
}

Datum ist fast vollständig veraltet und ist aus Gründen der Abwärtskompatibilität immer noch vorhanden. Wenn Sie bestimmte Daten einstellen oder Datumsberechnungen durchführen müssen, verwenden Sie a Kalender:

Calendar calendar = Calendar.getInstance(); // gets a calendar using the default time zone and locale.
calendar.add(Calendar.SECOND, 5);
System.out.println(calendar.getTime());

  • Bedeutet fast vollständig veraltet, dass es kaputt geht, wenn meine Kunden ihre JVM aktualisieren? Heilige Scheiße … das könnte wirklich schlimm sein. Warum sollten sie Date töten?!

    – Karl

    31. Oktober 2009 um 21:32 Uhr

  • Sehr, sehr selten wird veraltetes Zeug wirklich aus der JRE entfernt und normalerweise wird es nur getan, wenn die Funktionalität aktiv schädlich ist. Ich denke, es besteht keine Gefahr, dass Date in einer der nächsten großen Versionen entfernt wird. Es ist veraltet, weil es einige schwerwiegende Nachteile hat, aber es wird bleiben.

    – Joachim Sauer

    31. Oktober 2009 um 21:53 Uhr

  • @Karl Ich habe Joachims Antwort nichts hinzuzufügen.

    – Pascal Thivent

    31. Oktober 2009 um 21:56 Uhr

  • @Karl, als FYI-Kalender.getTime() gibt in diesem Beispiel ein Datum zurück. Ich glaube nicht, dass sie Date so sehr ablehnen, wie sie einige seiner Funktionen ablehnen.

    – Nick Stinemates

    1. November 2009 um 0:21 Uhr

  • @Tuntable Die Joda-Zeit Projekt wurde von der gelungen java.time Klassen definiert in JSR310wie die schrecklichen waren Date/Calendar Klassen. Ex: java.time.Instant.now().plusSeconds( 5 )

    – Basilikum Bourque

    11. Juni 2019 um 20:35 Uhr


Benutzer-Avatar
Jon Skeet

Sie können Folgendes verwenden:

now.setTime(now.getTime() + 5000);

Date.getTime() und setTime() beziehen sich immer auf Millisekunden seit dem 1. Januar 1970 00:00 Uhr UTC.

Joda-Zeit

Ich würde Ihnen jedoch dringend zur Verwendung raten Joda-Zeit wenn Sie mehr als nur die einfachste Handhabung von Datum und Uhrzeit tun. Es ist ein viel leistungsfähigere und benutzerfreundlichere Bibliothek als die eingebaute Unterstützung in Java.

DateTime later = DateTime.now().plusSeconds( 5 );

java.time

Joda-Time inspirierte später das Neue java.time-Paket eingebaut in Java 8.

  • Während ich F5 drücke, füllt sich Ihr Beitrag mit immer mehr nützlichen Informationen, es ist magisch =/

    – Waleed Amjad

    31. Oktober 2009 um 19:35 Uhr

  • Was ist mit der Verwendung des Kalenders?

    – Nick Stinemates

    31. Oktober 2009 um 19:40 Uhr

  • Nun, ich konnte eine java.util.Date-Frage nicht gehen lassen, ohne Joda zu erwähnen 🙂

    – Jon Skeet

    31. Oktober 2009 um 19:40 Uhr

  • @Nick: Der Kalender ist eine sehr knifflige API, mit der man richtig arbeiten kann, und lässt Sie nicht die Idee von “nur ein Datum” (keine Uhrzeit) oder “ein lokales Datum/eine lokale Uhrzeit” usw. ausdrücken. Entscheiden Sie sich für Joda 🙂

    – Jon Skeet

    31. Oktober 2009 um 19:41 Uhr

  • Nun, um 5 Sekunden zu “jetzt” hinzuzufügen, scheint es nützlich zu sein, ein Datum mit einer Uhrzeit auszudrücken 🙂

    – Pascal Thivent

    31. Oktober 2009 um 20:13 Uhr

Aus der Einzeiler-Hacky-Abteilung:

new Date( System.currentTimeMillis() + 5000L)

Wie ich es aus Ihrem Beispiel verstehe, ist “jetzt” wirklich “jetzt”, und “System.currentTimeMillis()” repräsentiert zufällig dasselbe “jetzt” -Konzept 🙂

Aber, ja, für alles, was komplizierter ist, rockt die Joda-Zeit-API.

Benutzer-Avatar
Basil Bourque

tl;dr

Instant             // Use modern `java.time.Instant` class to represent a moment in UTC.
.now()              // Capture the current moment in UTC.
.plusSeconds( 5 )   // Add five seconds into the future. Returns another `Instant` object per the Immutable Objects pattern.

java.time

Nutze die Moderne java.time Klassen, die vor Jahren das Schreckliche verdrängt haben Date & Calendar Klassen.

koordinierte Weltzeit

Um in UTC zu arbeiten, verwenden Sie Instant.

Instant later = Instant.now().plusSeconds( 5 ) ;

Zeitzone

Um in einer bestimmten Zeitzone zu arbeiten, verwenden Sie ZonedDateTime.

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime later = ZonedDateTime.now( z ).pluSeconds( 5 ) ;

Duration

Sie können die Menge und Granularität der hinzuzufügenden Zeit per Softcode codieren. Verwenden Sie die Duration Klasse.

Duration d = Duration.ofSeconds( 5 ) ;
Instant later = Instant.now().plus( d ) ;  // Soft-code the amount of time to add or subtract.

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.

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

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

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. Unterstützung für Hibernate 5 und JPA 2.2 java.time.

Wo erhalte ich die java.time-Klassen?

Wie andere schon gesagt haben, in Joda es ist viel einfacher:

DateTime dt = new DateTime();
DateTime added = dt.plusSeconds(5);

Ich würde Ihnen dringend empfehlen, zu Joda zu migrieren. Fast jede Java-Datumsfrage zu SO führt zu einer Joda-Empfehlung 🙂 Die Joda-API soll die Grundlage der neuen Standard-Java-Datums-API (JSR310) sein, also werden Sie zu einem neuen Standard migrieren.

  • “java.util.Date” soll “Joda Time verwenden”, da “Random gibt mir wiederholte Werte” bedeutet, “keine neuen Instanzen von Random zu erstellen” 🙂

    – Jon Skeet

    31. Oktober 2009 um 21:35 Uhr

Benutzer-Avatar
Alexandre Santos

Ignorieren Dates und sich auf die Frage konzentrieren.

Meine Präferenz ist zu verwenden java.util.concurrent.TimeUnit da es meinen Code klarer macht.

Auf Java,

long now = System.currentTimeMillis();

5 Sekunden ab now verwenden TimeUtil ist:

long nowPlus5Seconds = now + TimeUnit.SECONDS.toMillis(5);

Bezug: http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html

  • “java.util.Date” soll “Joda Time verwenden”, da “Random gibt mir wiederholte Werte” bedeutet, “keine neuen Instanzen von Random zu erstellen” 🙂

    – Jon Skeet

    31. Oktober 2009 um 21:35 Uhr

AKTUALISIEREN: Siehe meine neue Antwort mit java.time Klassen. Ich lasse diese Antwort als Geschichte intakt.


Die Antwort von Pascal Thivent und die Antwort von Jon Skeet sind beide richtig und gut. Hier sind ein paar zusätzliche Informationen.

Fünf Sekunden = PT5S (ISO-8601)

Eine andere Möglichkeit, die Idee von “fünf Sekunden später” auszudrücken, besteht in einer Zeichenfolge unter Verwendung der von definierten Standardformate ISO 8601. Das Dauer/Zeitraum-Format hat dieses Muster PnYnMnDTnHnMnS bei dem die P markiert den Anfang und die T trennt den Datumsteil vom Zeitteil.

Also fünf Sekunden sind PT5S.

Joda-Zeit

Das Joda-Zeit 2.8-Bibliothek kann solche Dauer-/Zeitraum-Strings sowohl generieren als auch parsen. Siehe die Period, Durationund Interval Klassen. Sie können Period-Objekte hinzufügen und von ihnen subtrahieren DateTime Objekte.

Durchsuchen Sie StackOverflow nach vielen Beispielen und Diskussionen. Hier ist ein kurzes Beispiel.

DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( zone );
DateTime then = now.plusSeconds( 5 );
Interval interval = new Interval( now, then );
Period period = interval.toPeriod( );

DateTime thenAgain = now.plus( period );

Dump auf Konsole.

System.out.println( "zone: " + zone );
System.out.println( "From now: " + now + " to then: " + then );
System.out.println( "interval: " + interval );
System.out.println( "period: " + period );
System.out.println( "thenAgain: " + thenAgain );

Beim Laufen.

zone: America/Montreal
From now: 2015-06-15T19:38:21.242-04:00 to then: 2015-06-15T19:38:26.242-04:00
interval: 2015-06-15T19:38:21.242-04:00/2015-06-15T19:38:26.242-04:00
period: PT5S
thenAgain: 2015-06-15T19:38:26.242-04:00

1175860cookie-checkWie sage ich 5 Sekunden ab jetzt in Java?

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

Privacy policy