372 Stimmen

So erhalten Sie das aktuelle Datum und die Uhrzeit

Wie kann ich das aktuelle Datum und die Uhrzeit in Java abfragen?

Ich bin auf der Suche nach etwas, das gleichwertig ist mit DateTime.Now von C#.

434voto

delfuego Punkte 13864

Konstruieren Sie einfach eine neue Date Objekt ohne Argumente; dadurch wird dem neuen Objekt das aktuelle Datum und die aktuelle Uhrzeit zugewiesen.

import java.util.Date;

Date d = new Date();

Mit den Worten von die Javadocs para [der Null-Argument-Konstruktor](http://java.sun.com/javase/6/docs/api/java/util/Date.html#Date()) :

Weist ein Date-Objekt zu und initialisiert ihn so, dass er den Zeitpunkt der Zuteilung repräsentiert auf die nächste Millisekunde genau gemessen.

Stellen Sie sicher, dass Sie Folgendes verwenden java.util.Date und nicht java.sql.Date -- letzteres hat keinen Null-Arg-Konstruktor und hat eine etwas andere Semantik, die das Thema einer ganz anderen Unterhaltung ist :)

57voto

cdmckay Punkte 30897

Die Java Datum y Kalender Klassen werden von vielen als schlecht konzipiert angesehen. Sie sollten einen Blick werfen auf Joda Zeit , eine Bibliothek, die häufig anstelle der in Java eingebauten Datumsbibliotheken verwendet wird.

Das Äquivalent von DateTime.Now in Joda Zeit ist:

DateTime dt = new DateTime();

Update

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

DateTime dt = DateTime.now();

55voto

Basil Bourque Punkte 256611

Tl;dr

Instant.now()

java.time

Die Klasse java.util.Date wurde durch das neue java.time-Paket ( Tutorial ) in Java 8 und höher. Die alten java.util.Date/.Calendar-Klassen sind bekanntermaßen mühsam, verwirrend und fehlerhaft. Vermeiden Sie sie.

ZonedDateTime

Ermittelt den aktuellen Zeitpunkt in java.time.

ZonedDateTime now = ZonedDateTime.now();

A ZonedDateTime kapselt:

  • Datum.
  • Tageszeit, mit einem Bruchteil einer Sekunde bis Nanosekunde Auflösung.
  • Zeitzone.

Wenn keine Zeitzone angegeben wird, wird die aktuelle Standardzeitzone Ihrer JVM stillschweigend zugewiesen. Es ist besser, Ihre gewünschte/erwartete Zeitzone anzugeben, als sich implizit auf die Standardeinstellung zu verlassen.

ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );

UTC

Im Allgemeinen ist es besser, sich daran zu gewöhnen, die Back-End-Arbeiten (Geschäftslogik, Datenbank, Speicherung, Datenaustausch) in UTC Zeitzone. Der obige Code stützt sich implizit auf die aktuelle Standardzeitzone der JVM.

En Instant stellt einen Zeitpunkt in der Zeitachse in UTC mit einer Auflösung von Nanosekunden dar.

Instant instant = Instant.now();

En Instant Klasse ist eine grundlegende Bausteinklasse in java.time und wird in Ihrem Code häufig verwendet werden.

Wenn Sie mehr Flexibilität bei der Formatierung benötigen, verwandeln Sie sich in eine OffsetDateTime . Angeben einer ZoneOffset Objekt. Für UTC verwenden Sie das praktische Konstante für UTC .

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );

Zeitzone

Sie können leicht eine andere Zeitzone für die Präsentation für den Benutzer einstellen. Verwenden Sie eine Name der richtigen Zeitzone , jamais die Codes mit 3-4 Buchstaben wie EST ou IST .

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

Erzeugt eine String-Darstellung dieses Datums-Zeit-Wertes, lokalisiert.

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

Instant

Oder, um in UTC zu bleiben, verwenden Sie Instant . Eine Instant Objekt stellt einen Moment auf der Zeitachse dar, mit Nanosekunden-Auflösung, immer in UTC. Dies stellt den Baustein für eine zonierte Datumszeit dar, zusammen mit einer Zeitzonenzuweisung. Sie können sich das konzeptionell so vorstellen:

ZonedDateTime = Instant + ZoneId

Sie können eine Instant von einer ZonedDateTime .

Instant instantNow = zdt.toInstant();

Sie können mit einem Instant beginnen. Sie müssen hier keine Zeitzone angeben, da Instant ist immer in UTC.

Instant now = Instant.now();

16voto

ralph Punkte 987

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

14voto

Vitalii Fedorenko Punkte 103468

In Java 8 heißt es:

ZonedDateTime dateTime = ZonedDateTime.now();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X