Diese Frage ist älter als diese Frage, die früher als Duplikat markiert war. Also habe ich die Bezeichnung umgekehrt, diese Frage erneut geöffnet und die neuere als Duplikat markiert.
Basil Bourque
Antworten:
414
Konstruieren Sie einfach ein neues DateObjekt ohne Argumente. Dadurch werden dem neuen Objekt das aktuelle Datum und die aktuelle Uhrzeit zugewiesen.
Ordnet ein Datumsobjekt zu und initialisiert es so, dass es den Zeitpunkt darstellt, zu dem es zugewiesen wurde , gemessen auf die nächste Millisekunde.
Stellen Sie sicher, dass Sie verwenden java.util.Dateund nicht java.sql.Date- letzterer hat keinen Null-Argument-Konstruktor und eine etwas andere Semantik, die Gegenstand einer völlig anderen Konversation ist. :) :)
Beachten Sie auch, dass GregorianCalendar und viele ähnliche Objekte auf die gleiche Weise funktionieren. Unabhängig davon, mit welcher Art von Datums- / Kalenderobjekt Sie arbeiten, initialisiert der Konstruktor mit Nullargumenten das Objekt normalerweise mit dem aktuellen Datum / der aktuellen Uhrzeit.
Peter Di Cecco
Ab Datumsdokument: Ab JDK 1.1 sollte die Kalenderklasse zum Konvertieren zwischen Datums- und Zeitfeldern und die DateFormat-Klasse zum Formatieren und Analysieren von Datumszeichenfolgen verwendet werden.
Die Java- Datums- und Kalenderklassen werden von vielen als schlecht gestaltet angesehen. Sie sollten sich Joda Time ansehen , eine Bibliothek, die häufig anstelle der in Java integrierten Datumsbibliotheken verwendet wird.
Das Äquivalent von DateTime.Nowin Joda Time ist:
DateTime dt =newDateTime();
Aktualisieren
Wie in den Kommentaren erwähnt, haben die neuesten Versionen von Joda Time eine DateTime.now()Methode, also:
Beachten Sie, dass diese Antwort im Jahr 2010 veröffentlicht wurde. Java 8 hat viele der besten Funktionen von Joda Time übernommen. Weitere Informationen finden Sie in der offiziellen Dokumentation und in vielen anderen Online-Artikeln.
DavidS
36
tl; dr
Instant.now()
java.time
Die Klasse java.util.Date wurde durch das neue Paket java.time ( Tutorial ) in Java 8 und höher veraltet . Die alten Klassen java.util.Date/.Calendar sind notorisch mühsam, verwirrend und fehlerhaft. Vermeide sie.
Tageszeit mit einer Auflösung von Sekundenbruchteilen bis Nanosekunden .
Zeitzone.
Wenn keine Zeitzone angegeben ist, wird die aktuelle Standardzeitzone Ihrer JVM unbeaufsichtigt zugewiesen. Es ist besser, die gewünschte / erwartete Zeitzone anzugeben, als sich implizit auf die Standardeinstellung zu verlassen.
ZoneId z =ZoneId.of("Pacific/Auckland");ZonedDateTime zdt =ZonedDateTime.now( z );
koordinierte Weltzeit
Im Allgemeinen ist es besser, sich daran zu gewöhnen, Ihre Back-End-Arbeit (Geschäftslogik, Datenbank, Speicher, Datenaustausch) in der UTC- Zeitzone auszuführen. Der obige Code basiert implizit auf der aktuellen Standardzeitzone der JVM.
Die InstantKlasse repräsentiert einen Moment in der Zeitleiste in UTC mit einer Auflösung von Nanosekunden.
Instant instant =Instant.now();
Die InstantKlasse ist eine grundlegende Bausteinklasse in java.time und kann häufig in Ihrem Code verwendet werden.
Wenn Sie mehr Flexibilität bei der Formatierung benötigen, verwandeln Sie sich in eine OffsetDateTime. Geben Sie ein ZoneOffsetObjekt an. Verwenden Sie für UTC die handliche Konstante für UTC .
Sie können sich einfach auf eine andere Zeitzone einstellen, um sie dem Benutzer zu präsentieren. Verwenden Sie einen geeigneten Zeitzonennamen , niemals die 3-4-Buchstaben-Codes wie ESToder IST.
ZoneId z =ZoneId.of("America/Montreal");ZonedDateTime nowMontreal = instant.atZone( z );
Generieren Sie eine lokalisierte Zeichenfolgendarstellung dieses Datums- / Uhrzeitwerts.
Oder verwenden Sie, um in UTC zu bleiben Instant. Ein InstantObjekt repräsentiert einen Moment auf der Zeitachse mit einer Auflösung von Nanosekunden, immer in UTC. Dies stellt den Baustein für eine Zonen-Datums- und Uhrzeit zusammen mit einer Zeitzonenzuweisung bereit. Sie können es konzeptionell so sehen:
Java hat immer unzureichende Unterstützung für die Anwendungsfälle von Datum und Uhrzeit erhalten. Beispielsweise sind die vorhandenen Klassen (wie java.util.Dateund SimpleDateFormatter) nicht threadsicher, was zu Parallelitätsproblemen führen kann. Es gibt auch bestimmte Fehler in der API. Zum Beispiel java.util.Datebeginnen Jahre um 1900, Monate um 1 und Tage um 0 - nicht sehr intuitiv. Diese Probleme führten zur Popularität von Datums- und Zeitbibliotheken von Drittanbietern, wie z Joda-Time. Zur Adressierung eines neuen Datums und einer neuen Uhrzeit wurde die API für Java SE 8 entwickelt.
Die Methode now()gibt die aktuelle Datums- und Uhrzeitangabe unter Verwendung der Systemuhr und der Standardzeitzone zurück, nicht null . Die aktuelle Datums- und Uhrzeitangabe wird von der Systemuhr in der Standardzeitzone abgerufen. Dadurch wird die Systemuhr in der Standardzeitzone abgefragt, um die aktuelle Datums- und Uhrzeitangabe zu erhalten. Die Verwendung dieser Methode verhindert, dass eine alternative Uhr zum Testen verwendet werden kann, da die Uhr fest codiert ist.
Antworten:
Konstruieren Sie einfach ein neues
Date
Objekt ohne Argumente. Dadurch werden dem neuen Objekt das aktuelle Datum und die aktuelle Uhrzeit zugewiesen.In den Worten der Javadocs für den Null-Argument-Konstruktor :
Stellen Sie sicher, dass Sie verwenden
java.util.Date
und nichtjava.sql.Date
- letzterer hat keinen Null-Argument-Konstruktor und eine etwas andere Semantik, die Gegenstand einer völlig anderen Konversation ist. :) :)quelle
Die Java- Datums- und Kalenderklassen werden von vielen als schlecht gestaltet angesehen. Sie sollten sich Joda Time ansehen , eine Bibliothek, die häufig anstelle der in Java integrierten Datumsbibliotheken verwendet wird.
Das Äquivalent von
DateTime.Now
in Joda Time ist:Aktualisieren
Wie in den Kommentaren erwähnt, haben die neuesten Versionen von Joda Time eine
DateTime.now()
Methode, also:quelle
tl; dr
java.time
Die Klasse java.util.Date wurde durch das neue Paket java.time ( Tutorial ) in Java 8 und höher veraltet . Die alten Klassen java.util.Date/.Calendar sind notorisch mühsam, verwirrend und fehlerhaft. Vermeide sie.
ZonedDateTime
Holen Sie sich den aktuellen Moment in java.time.
A
ZonedDateTime
kapselt:Wenn keine Zeitzone angegeben ist, wird die aktuelle Standardzeitzone Ihrer JVM unbeaufsichtigt zugewiesen. Es ist besser, die gewünschte / erwartete Zeitzone anzugeben, als sich implizit auf die Standardeinstellung zu verlassen.
koordinierte Weltzeit
Im Allgemeinen ist es besser, sich daran zu gewöhnen, Ihre Back-End-Arbeit (Geschäftslogik, Datenbank, Speicher, Datenaustausch) in der UTC- Zeitzone auszuführen. Der obige Code basiert implizit auf der aktuellen Standardzeitzone der JVM.
Die
Instant
Klasse repräsentiert einen Moment in der Zeitleiste in UTC mit einer Auflösung von Nanosekunden.Die
Instant
Klasse ist eine grundlegende Bausteinklasse in java.time und kann häufig in Ihrem Code verwendet werden.Wenn Sie mehr Flexibilität bei der Formatierung benötigen, verwandeln Sie sich in eine
OffsetDateTime
. Geben Sie einZoneOffset
Objekt an. Verwenden Sie für UTC die handliche Konstante für UTC .Zeitzone
Sie können sich einfach auf eine andere Zeitzone einstellen, um sie dem Benutzer zu präsentieren. Verwenden Sie einen geeigneten Zeitzonennamen , niemals die 3-4-Buchstaben-Codes wie
EST
oderIST
.Generieren Sie eine lokalisierte Zeichenfolgendarstellung dieses Datums- / Uhrzeitwerts.
Instant
Oder verwenden Sie, um in UTC zu bleiben
Instant
. EinInstant
Objekt repräsentiert einen Moment auf der Zeitachse mit einer Auflösung von Nanosekunden, immer in UTC. Dies stellt den Baustein für eine Zonen-Datums- und Uhrzeit zusammen mit einer Zeitzonenzuweisung bereit. Sie können es konzeptionell so sehen:Sie können ein
Instant
aus einem extrahierenZonedDateTime
.Sie können mit einem Instant beginnen. Hier muss keine Zeitzone angegeben werden, wie dies
Instant
immer in UTC der Fall ist.quelle
Ich bevorzuge die Verwendung des Kalenderobjekts.
Ich finde es viel einfacher, damit zu arbeiten. Sie können auch ein Datumsobjekt aus dem Kalender abrufen.
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
quelle
Calendar.getInstance()
In Java 8 ist es:
quelle
Beachten Sie, dass das Date- Objekt veränderbar ist. Wenn Sie etwas Anspruchsvolles tun möchten, verwenden Sie jodatime .
quelle
java.lang.System.currentTimeMillis();
gibt die datetime seit der Epoche zurückquelle
quelle
Wenn Sie ein neues Datumsobjekt erstellen, wird es standardmäßig auf die aktuelle Uhrzeit eingestellt:
quelle
Java hat immer unzureichende Unterstützung für die Anwendungsfälle von Datum und Uhrzeit erhalten. Beispielsweise sind die vorhandenen Klassen (wie
java.util.Date
undSimpleDateFormatter
) nicht threadsicher, was zu Parallelitätsproblemen führen kann. Es gibt auch bestimmte Fehler in der API. Zum Beispieljava.util.Date
beginnen Jahre um 1900, Monate um 1 und Tage um 0 - nicht sehr intuitiv. Diese Probleme führten zur Popularität von Datums- und Zeitbibliotheken von Drittanbietern, wie zJoda-Time
. Zur Adressierung eines neuen Datums und einer neuen Uhrzeit wurde die API für Java SE 8 entwickelt.Gemäß Dokument :
quelle