Antworten:
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
oder DateTimeFormatter
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
DateTime jodaTime = new DateTime();
DateTimeFormatter formatter = DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss.SSS");
System.out.println("jodaTime = " + formatter.print(jodaTime));
Sie haben auch direkten Zugriff auf die einzelnen Felder des Datums, ohne einen Kalender zu verwenden.
System.out.println("year = " + jodaTime.getYear());
System.out.println("month = " + jodaTime.getMonthOfYear());
System.out.println("day = " + jodaTime.getDayOfMonth());
System.out.println("hour = " + jodaTime.getHourOfDay());
System.out.println("minute = " + jodaTime.getMinuteOfHour());
System.out.println("second = " + jodaTime.getSecondOfMinute());
System.out.println("millis = " + jodaTime.getMillisOfSecond());
Die Ausgabe ist wie folgt:
jodaTime = 2010-04-16 18:09:26.060
year = 2010
month = 4
day = 16
hour = 18
minute = 9
second = 26
millis = 60
Laut http://www.joda.org/joda-time/
Joda-Time ist die De-facto-Standardbibliothek für Datum und Uhrzeit für Java. Ab Java SE 8 werden Benutzer aufgefordert, auf java.time (JSR-310) zu migrieren.
// Java 8
System.out.println(LocalDateTime.now().getYear()); // 2015
System.out.println(LocalDateTime.now().getMonth()); // SEPTEMBER
System.out.println(LocalDateTime.now().getDayOfMonth()); // 29
System.out.println(LocalDateTime.now().getHour()); // 7
System.out.println(LocalDateTime.now().getMinute()); // 36
System.out.println(LocalDateTime.now().getSecond()); // 51
System.out.println(LocalDateTime.now().get(ChronoField.MILLI_OF_SECOND)); // 100
// Calendar
System.out.println(Calendar.getInstance().get(Calendar.YEAR)); // 2015
System.out.println(Calendar.getInstance().get(Calendar.MONTH ) + 1); // 9
System.out.println(Calendar.getInstance().get(Calendar.DAY_OF_MONTH)); // 29
System.out.println(Calendar.getInstance().get(Calendar.HOUR_OF_DAY)); // 7
System.out.println(Calendar.getInstance().get(Calendar.MINUTE)); // 35
System.out.println(Calendar.getInstance().get(Calendar.SECOND)); // 32
System.out.println(Calendar.getInstance().get(Calendar.MILLISECOND)); // 481
// Joda Time
System.out.println(new DateTime().getYear()); // 2015
System.out.println(new DateTime().getMonthOfYear()); // 9
System.out.println(new DateTime().getDayOfMonth()); // 29
System.out.println(new DateTime().getHourOfDay()); // 7
System.out.println(new DateTime().getMinuteOfHour()); // 19
System.out.println(new DateTime().getSecondOfMinute()); // 16
System.out.println(new DateTime().getMillisOfSecond()); // 174
// Formatted
// 2015-09-28 17:50:25.756
System.out.println(new Timestamp(System.currentTimeMillis()));
// 2015-09-28T17:50:25.772
System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH).format(new Date()));
// Java 8
// 2015-09-28T17:50:25.810
System.out.println(LocalDateTime.now());
// joda time
// 2015-09-28 17:50:25.839
System.out.println(DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss.SSS").print(new org.joda.time.DateTime()));
Verwenden Sie unter Java 8 und höher das Paket java.time .
ZonedDateTime.now().getYear();
ZonedDateTime.now().getMonthValue();
ZonedDateTime.now().getDayOfMonth();
ZonedDateTime.now().getHour();
ZonedDateTime.now().getMinute();
ZonedDateTime.now().getSecond();
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 einen int
Wert zurück.
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. Verwendung Instant
, ZonedDateTime
oder OffsetDateTime
statt.
ZonedDateTime
.
ZonedDateTime.now( // Capture current moment as seen in the wall-clock time used by the people of a particular region (a time zone).
ZoneId.of( "America/Montreal" ) // Specify desired/expected time zone. Or pass `ZoneId.systemDefault` for the JVM’s current default time zone.
) // Returns a `ZonedDateTime` object.
.getMinute() // Extract the minute of the hour of the time-of-day from the `ZonedDateTime` object.
42
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 Beispiel America/Montreal
, Africa/Casablanca
oder Pacific/Auckland
. Verwenden Sie niemals die Abkürzung für 3-4 Buchstaben, wie EST
oder, IST
da es sich nicht um echte Zeitzonen handelt, die nicht standardisiert und nicht einmal eindeutig (!) Sind.
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
Rufen Sie einen der vielen Getter an, um Teile der Datums- und Uhrzeitangabe herauszuholen.
int year = zdt.getYear() ;
int monthNumber = zdt.getMonthValue() ;
String monthName = zdt.getMonth().getDisplayName( TextStyle.FULL , Locale.JAPAN ) ; // Locale determines human language and cultural norms used in localizing. Note that `Locale` has *nothing* to do with time zone.
int dayOfMonth = zdt.getDayOfMonth() ;
String dayOfWeek = zdt.getDayOfWeek().getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;
int hour = zdt.getHour() ; // Extract the hour from the time-of-day.
int minute = zdt.getMinute() ;
int second = zdt.getSecond() ;
int nano = zdt.getNano() ;
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.
long millis = TimeUnit.NANOSECONDS.toMillis( zdt.getNano() ) ;
DateTimeFormatter
Zur Herstellung einer String
Textstück zu kombinieren, verwendet DateTimeFormatter
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
.
Instant instant = zdt.toInstant() ;
Und geh wieder zurück.
ZonedDateTime zdt = instant.atZone( ZoneId.of( "Africa/Tunis" ) ) ;
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? Verwenden LocalDateTime
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 (a ZoneId
) anwenden , um a zu erhalten ZonedDateTime
. 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 werden ZonedDateTime
. Weihnachten ist überall mit einem dargestellt LocalDateTime
.
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?
Oder verwenden Sie java.sql.Timestamp. Der Kalender ist ziemlich schwer, ich würde empfehlen, ihn nicht im Produktionscode zu verwenden. Joda ist besser.
import java.sql.Timestamp;
public class DateTest {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(new Timestamp(System.currentTimeMillis()));
}
}
new Date()
hier verwenden. Aber wie würden Sie die einzelnen Teile einfach wie gewünscht daraus erhalten?
java.sql.Timestamp
wurde durch die java.time.Instant
mit der Ankunft von JDBC 4.2 ersetzt.
in Java 7 Kalender eine Zeile
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(Calendar.getInstance().getTime())
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).
java.util.Date
, java.util.Calendar
und java.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.
MONTH
und HOUR
sind statische Konstanten von Calendar
, nicht Instanzeigenschaften.