Wie erhalte ich das aktuelle Datum und die aktuelle Uhrzeit in Java?
Ich suche etwas, das DateTime.Now
C # entspricht.
Wie erhalte ich das aktuelle Datum und die aktuelle Uhrzeit in Java?
Ich suche etwas, das DateTime.Now
C # entspricht.
Antworten:
Konstruieren Sie einfach ein neues Date
Objekt 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.Date
und nicht java.sql.Date
- letzterer hat keinen Null-Argument-Konstruktor und eine etwas andere Semantik, die Gegenstand einer völlig anderen Konversation ist. :) :)
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:
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();
Instant.now()
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 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.
ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );
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.
Instant instant = Instant.now();
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 ein ZoneOffset
Objekt an. Verwenden Sie für UTC die handliche Konstante für UTC .
OffsetDateTime odt = instant.atOffset( ZoneOffset.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 EST
oder 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 Instant
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 extrahieren ZonedDateTime
.
Instant instantNow = zdt.toInstant();
Sie können mit einem Instant beginnen. Hier muss keine Zeitzone angegeben werden, wie dies Instant
immer in UTC der Fall ist.
Instant now = Instant.now();
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
Calendar.getInstance()
In Java 8 ist es:
ZonedDateTime dateTime = ZonedDateTime.now();
java.lang.System.currentTimeMillis();
gibt die datetime seit der Epoche zurück
Wenn Sie ein neues Datumsobjekt erstellen, wird es standardmäßig auf die aktuelle Uhrzeit eingestellt:
import java.util.Date;
Date now = new Date();
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
und SimpleDateFormatter
) nicht threadsicher, was zu Parallelitätsproblemen führen kann. Es gibt auch bestimmte Fehler in der API. Zum Beispiel java.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 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.