So erhalten Sie das aktuelle Datum und die aktuelle Uhrzeit

342

Wie erhalte ich das aktuelle Datum und die aktuelle Uhrzeit in Java?

Ich suche etwas, das DateTime.NowC # entspricht.

mrblah
quelle
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.

import java.util.Date;

Date d = new Date();

In den Worten der Javadocs für den Null-Argument-Konstruktor :

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. :) :)

Delfuego
quelle
13
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.
Paolo M
9
Bitte beachten Sie neue Java8-APIs - LocalDateTime.now () und ZonedDateTime.now ()
Oleg Mikheev
59

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 = new DateTime();

Aktualisieren

Wie in den Kommentaren erwähnt, haben die neuesten Versionen von Joda Time eine DateTime.now()Methode, also:

DateTime dt = DateTime.now();
cdmckay
quelle
4
Die aktuelle (2.1) Version von Joda scheint eine statische DateTime.now-Methode () zu haben (akzeptiert optional DateTimeZone oder Chronology). joda-time.sourceforge.net/apidocs/org/joda/time/…
Roman A. Taycher
1
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.

ZonedDateTime

Holen Sie sich den aktuellen Moment in java.time.

ZonedDateTime now = ZonedDateTime.now();

A ZonedDateTimekapselt:

  • Datum.
  • 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 .

OffsetDateTime odt = instant.atOffset( ZoneOffset.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 ESToder IST.

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime nowMontreal = instant.atZone( z );

Generieren Sie eine lokalisierte Zeichenfolgendarstellung dieses Datums- / Uhrzeitwerts.

String output = DateTimeFormatter
    .ofLocalizedDate( FormatStyle.FULL )
    .withLocale( Locale.CANADA_FRENCH )
    .format ( nowMontreal );

Instant

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:

ZonedDateTime= Instant+ZoneId

Sie können ein Instantaus einem extrahieren ZonedDateTime.

Instant instantNow = zdt.toInstant();

Sie können mit einem Instant beginnen. Hier muss keine Zeitzone angegeben werden, wie dies Instantimmer in UTC der Fall ist.

Instant now = Instant.now();
Basil Bourque
quelle
Ich habe auch eine andere Antwort mit mehr Details zu einer doppelten Frage gepostet .
Basil Bourque
16

Ich bevorzuge die Verwendung des Kalenderobjekts.

Calendar now = GregorianCalendar.getInstance()

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

ralph
quelle
4
Oder es kann einfach seinCalendar.getInstance()
ziehen Sie
14

In Java 8 ist es:

ZonedDateTime dateTime = ZonedDateTime.now();
Vitalii Fedorenko
quelle
12
import java.util.Date;   
Date now = new Date();

Beachten Sie, dass das Date- Objekt veränderbar ist. Wenn Sie etwas Anspruchsvolles tun möchten, verwenden Sie jodatime .

Chandra Patni
quelle
10

java.lang.System.currentTimeMillis(); gibt die datetime seit der Epoche zurück

user243773
quelle
Gut für die Protokollierung, erfordert jedoch Analyse und Konvertierung für die Anzeige für den Benutzer
Rishi Dua
6
import org.joda.time.DateTime;

DateTime now = DateTime.now();
gordy
quelle
5

Wenn Sie ein neues Datumsobjekt erstellen, wird es standardmäßig auf die aktuelle Uhrzeit eingestellt:

import java.util.Date;
Date now = new Date();
Parkerfath
quelle
3

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.

LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);

Gemäß Dokument :

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.

akhil_mittal
quelle