Wie kann ich das Jahr, den Monat, den Tag, die Stunden, Minuten, Sekunden und Millisekunden des aktuellen Moments in Java abrufen? Ich hätte sie gerne als Strings
.
104
Sie können die Getter von java.time.LocalDateTime
dafür verwenden.
LocalDateTime now = LocalDateTime.now();
int year = now.getYear();
int month = now.getMonthValue();
int day = now.getDayOfMonth();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
int millis = now.get(ChronoField.MILLI_OF_SECOND); // Note: no direct getter available.
System.out.printf("%d-%02d-%02d %02d:%02d:%02d.%03d", year, month, day, hour, minute, second, millis);
Oder, wenn Sie noch nicht mit Java 8 arbeiten, nutzen Sie java.util.Calendar
.
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH) + 1; // Note: zero based!
int day = now.get(Calendar.DAY_OF_MONTH);
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
int second = now.get(Calendar.SECOND);
int millis = now.get(Calendar.MILLISECOND);
System.out.printf("%d-%02d-%02d %02d:%02d:%02d.%03d", year, month, day, hour, minute, second, millis);
In beiden Fällen wird ab sofort gedruckt:
2010-04-16 15: 15: 17.816
Verwenden Sie zum Konvertieren eines int
in .String
String#valueOf()
Wenn Ihre Absicht ist , nachdem alle sie in einem menschlichen freundlichen String - Format zu organisieren und anzuzeigen, und eine bessere Nutzung entweder Java8 der java.time.format.DateTimeFormatter
( Tutorial hier ),
LocalDateTime now = LocalDateTime.now();
String format1 = now.format(DateTimeFormatter.ISO_DATE_TIME);
String format2 = now.atZone(ZoneId.of("GMT")).format(DateTimeFormatter.RFC_1123_DATE_TIME);
String format3 = now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss", Locale.ENGLISH));
System.out.println(format1);
System.out.println(format2);
System.out.println(format3);
oder wenn Sie noch nicht mit Java 8 arbeiten, verwenden Sie java.text.SimpleDateFormat
:
Date now = new Date(); // java.util.Date, NOT java.sql.Date or java.sql.Timestamp!
String format1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH).format(now);
String format2 = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH).format(now);
String format3 = new SimpleDateFormat("yyyyMMddHHmmss", Locale.ENGLISH).format(now);
System.out.println(format1);
System.out.println(format2);
System.out.println(format3);
In jedem Fall ergibt dies:
2010-04-16T15: 15: 17.816 Fr, 16 Apr 2010 15:15:17 GMT 20100416151517
SimpleDateFormat
oderDateTimeFormatter
für diese bestimmte Aufgabe :)new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH).format(new Date());
Wechseln Sie zur Joda-Zeit und Sie können dies in drei Zeilen tun
Sie haben auch direkten Zugriff auf die einzelnen Felder des Datums, ohne einen Kalender zu verwenden.
Die Ausgabe ist wie folgt:
Laut http://www.joda.org/joda-time/
quelle
quelle
Verwenden Sie unter Java 8 und höher das Paket java.time .
ZonedDateTime.now()
ist eine statische Methode, die das aktuelle Datum und die aktuelle Uhrzeit von der Systemuhr in der Standardzeitzone zurückgibt. Alle get-Methoden geben einenint
Wert zurück.quelle
LocalDateTime
ist genau die falsche Klasse dafür. Ohne ein Konzept der Zeitzone oder des Versatzes von UTC kann es nicht verwendet werden, um einen bestimmten Moment zu verfolgen, es ist kein Punkt auf der Zeitachse. VerwendungInstant
,ZonedDateTime
oderOffsetDateTime
statt.ZonedDateTime
.tl; dr
ZonedDateTime
Verwenden Sie, um den aktuellen Moment in der Wanduhrzeit zu erfassen, die von den Personen einer bestimmten Region (einer Zeitzone) verwendet wird
ZonedDateTime
.Eine Zeitzone ist entscheidend für die Bestimmung eines Datums. Für jeden Moment variiert das Datum weltweit je nach Zone. Zum Beispiel ist ein paar Minuten nach Mitternacht in Paris Frankreich ein neuer Tag, während es in Montréal Québec noch „gestern“ ist .
Wenn keine Zeitzone angegeben ist, wendet die JVM implizit ihre aktuelle Standardzeitzone an. Diese Standardeinstellung kann sich jederzeit zur Laufzeit (!) Ändern , sodass Ihre Ergebnisse variieren können. Geben Sie Ihre gewünschte / erwartete Zeitzone besser explizit als Argument an.
Geben Sie einen richtigen Zeitzonennamen im Format
continent/region
, wie zum BeispielAmerica/Montreal
,Africa/Casablanca
oderPacific/Auckland
. Verwenden Sie niemals die Abkürzung für 3-4 Buchstaben, wieEST
oder,IST
da es sich nicht um echte Zeitzonen handelt, die nicht standardisiert und nicht einmal eindeutig (!) Sind.Rufen Sie einen der vielen Getter an, um Teile der Datums- und Uhrzeitangabe herauszuholen.
Die java.time- Klassen werden in Nanosekunden aufgelöst . Ihre Frage wurde in Sekundenbruchteilen in Millisekunden gestellt . Offensichtlich können Sie durch eine Million dividieren, um Nanosekunden auf Millisekunden zu reduzieren, und zwar auf Kosten eines möglichen Datenverlusts. Oder verwenden Sie die
TimeUnit
Aufzählung für eine solche Konvertierung.DateTimeFormatter
Zur Herstellung einer
String
Textstück zu kombinieren, verwendetDateTimeFormatter
Klasse. Suchen Sie im Stapelüberlauf nach weiteren Informationen dazu.Instant
Normalerweise ist es am besten, Momente in UTC zu verfolgen. Extrahieren Sie a, um von einer Datums- / Uhrzeit in Zonen auf UTC umzustellen
Instant
.Und geh wieder zurück.
LocalDateTime
Einige andere Antworten verwenden die
LocalDateTime
Klasse. Diese Klasse ist nicht für den Zweck geeignet, tatsächliche Momente, bestimmte Momente auf der Zeitachse zu verfolgen, da ihr absichtlich ein Konzept der Zeitzone oder des Versatzes von UTC fehlt.Wofür ist das
LocalDateTime
gut? VerwendenLocalDateTime
Sie diese Option, wenn Sie ein Datum und eine Uhrzeit auf einen Ort oder alle Orte anstatt auf einen bestimmten Ort anwenden möchten.Zum Beispiel beginnt Weihnachten dieses Jahr am
LocalDateTime.parse( "2018-12-25T00:00:00" )
. Dieser Wert hat keine Bedeutung, bis Sie eine Zeitzone (aZoneId
) anwenden , um a zu erhaltenZonedDateTime
. Weihnachten findet zuerst in Kiribati statt , später in Neuseeland und Fernostasien. Stunden später beginnt Weihnachten in Indien. Weitere Stunden später in Afrika und Europa. Und erst einige Stunden später noch Weihnachten auf dem amerikanischen Kontinent. Weihnachten in jedem Start eines Orts soll dargestellt werdenZonedDateTime
. Weihnachten ist überall mit einem dargestelltLocalDateTime
.Über java.time
Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Legacy - Datum-Zeit - Klassen wie
java.util.Date
,Calendar
, &SimpleDateFormat
.Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den Klassen java.time .
Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .
Sie können java.time- Objekte direkt mit Ihrer Datenbank austauschen . Verwenden Sie einen JDBC-Treiber, der mit JDBC 4.2 oder höher kompatibel ist . Keine Notwendigkeit für Zeichenfolgen, keine Notwendigkeit für
java.sql.*
Klassen.Woher bekomme ich die java.time-Klassen?
quelle
Oder verwenden Sie java.sql.Timestamp. Der Kalender ist ziemlich schwer, ich würde empfehlen, ihn nicht im Produktionscode zu verwenden. Joda ist besser.
quelle
new Date()
hier verwenden. Aber wie würden Sie die einzelnen Teile einfach wie gewünscht daraus erhalten?java.sql.Timestamp
wurde durch diejava.time.Instant
mit der Ankunft von JDBC 4.2 ersetzt.in Java 7 Kalender eine Zeile
quelle
Schauen Sie sich die API-Dokumentation für die Klasse java.util.Calendar und ihre Ableitungen an (möglicherweise interessieren Sie sich speziell für die Klasse GregorianCalendar).
quelle
java.util.Date
,java.util.Calendar
undjava.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 und höher. Siehe Tutorial von Oracle .Kalender jetzt = neuer Kalender () // oder neuer Gregorianischer Kalender () oder was auch immer Sie brauchen
now.MONTH now.HOUR
etc.
quelle
MONTH
undHOUR
sind statische Konstanten vonCalendar
, nicht Instanzeigenschaften.