it-swarm.com.de

Wie bekomme ich Jahr, Monat, Tag, Stunden, Minuten, Sekunden und Millisekunden des aktuellen Moments in Java?

Wie kann ich Jahr, Monat, Tag, Stunden, Minuten, Sekunden und Millisekunden des aktuellen Moments in Java ermitteln? Ich möchte sie als Strings haben.

91
Roman

Sie können dafür die Getter von Java.time.LocalDateTime 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);

Wenn Sie noch nicht mit Java 8 arbeiten, verwenden 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);

So oder so wird dies ab sofort gedruckt:

 2010-04-16 15: 15: 17.816 

Verwenden Sie String#valueOf() , um eine int in String zu konvertieren.


Wenn Sie mit after all die Anordnung und Anzeige in einem benutzerfreundlichen Zeichenfolgenformat beabsichtigen, sollten Sie entweder Java8s Java.time.format.DateTimeFormatter ( Tutorial hier ) verwenden.

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);

Wie auch immer, das ergibt:

 2010-04-16T15: 15: 17.816 
 Fri, 16 Apr 2010 15:15:17 GMT 
 20100416151517 

Siehe auch:

228
BalusC

Wechseln Sie zu joda-time 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, zu Java.time .__ zu migrieren. (JSR-310).

30
crowne

Verwenden Sie ab Java 8 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 von der Systemuhr in der Standardzeitzone zurückgibt. Alle get-Methoden geben einen int-Wert zurück.

6
Ortomala Lokni
    // 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()));
5
blueberry0xff

Oder verwenden Sie Java.sql.Timestamp. Der Kalender ist ziemlich schwer, ich würde die Verwendung von Im Produktionscode jedoch empfehlen. 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()));
    }
}
2
pavel

tl; dr

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 ZonedDateTime , um den aktuellen Moment zu erfassen, der in der von den Menschen einer bestimmten Region (einer Zeitzone) verwendeten Wanduhrzeit angezeigt wird.

Eine Zeitzone ist für die Bestimmung eines Datums von entscheidender Bedeutung. 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 noch „gestern“ in Montréal Québec .

Wenn keine Zeitzone angegeben ist, wendet die JVM implizit ihre aktuelle Standardzeitzone an. Diese Standardeinstellung kann zu jedem Zeitpunkt ändern während der Laufzeit (!), Sodass Ihre Ergebnisse variieren können. Geben Sie lieber Ihre gewünschte/erwartete Zeitzone explizit als Argument an.

Geben Sie Name der richtigen Zeitzone im Format continent/region An, z. B. America/Montreal , Africa/Casablanca oder Pacific/Auckland. Verwenden Sie niemals die Abkürzung mit 3-4 Buchstaben wie EST oder IST, da diese nicht echte Zeitzonen sind, nicht standardisiert und nicht einmalig (!) .

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;

Rufen Sie einen der vielen Getter an, um Teile der Datums- und Uhrzeitanzeige 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 Klassen Java.time werden in Nanosekunden aufgelöst. Ihre Frage wurde nach dem Bruchteil einer Sekunde in Millisekunden gestellt. Offensichtlich können Sie auf Kosten eines möglichen Datenverlusts durch eine Million dividieren, um Nanosekunden auf Millisekunden zu verkürzen. Oder verwenden Sie die Enumeration TimeUnit für eine solche Konvertierung.

long millis = TimeUnit.NANOSECONDS.toMillis( zdt.getNano() ) ;

DateTimeFormatter

Verwenden Sie die Klasse String , um eine DateTimeFormatter zu erstellen, um Textteile zu kombinieren. Suchen Sie in Stack Overflow nach weiteren Informationen.

Instant

Normalerweise ist es am besten, Momente in UTC zu verfolgen. Extrahieren Sie ein Instant, um die Zeitzone auf UTC umzustellen.

Instant instant = zdt.toInstant() ;

Und geh wieder zurück.

ZonedDateTime zdt = instant.atZone( ZoneId.of( "Africa/Tunis" ) ) ;

LocalDateTime

Einige andere Antworten verwenden die Klasse LocalDateTime. Diese Klasse ist nicht für den Zweck der Verfolgung tatsächlicher Momente oder bestimmter Momente auf der Zeitachse geeignet, da ihr absichtlich das Konzept einer Zeitzone oder eines Versatzes von UTC fehlt.

Wofür ist LocalDateTime gut? Verwenden Sie LocalDateTime, wenn Sie ein Datum und eine Uhrzeit für alle Orte oder alle Orte anstatt für einen bestimmten Ort festlegen möchten.

Zum Beispiel beginnt Weihnachten dieses Jahr mit der Funktion LocalDateTime.parse( "2018-12-25T00:00:00" ). Dieser Wert hat keine Bedeutung, bis Sie eine Zeitzone (ein ZoneId) anwenden, um ein ZonedDateTime zu erhalten. Weihnachten findet zuerst in Kiribati , dann später in Neuseeland und Fernostasien statt. Stunden später beginnt Weihnachten in Indien. Mehr Stunde später in Afrika & Europa. Und immer noch nicht Weihnachten in Amerika bis einige Stunden später. Weihnachten, das an einem beliebigen one Ort beginnt, sollte mit ZonedDateTime dargestellt werden. Weihnachten überall wird mit einem LocalDateTime dargestellt.


About Java.time

Das Java.time Framework ist in Java 8 und höher. Diese Klassen ersetzen das lästige alte Legacy Datum-Zeit-Klassen wie Java.util.Date , Calendar , & SimpleDateFormat .

Das Joda-Time -Projekt, das sich jetzt im Wartungsmodus befindet, rät zur Migration in die Java.time -Klassen.

Weitere Informationen finden Sie im Oracle Tutorial . Durchsuchen Sie Stack Overflow nach vielen Beispielen und Erklärungen. Spezifikation ist JSR 31 .

Sie können Java.time Objekte direkt mit Ihrer Datenbank austauschen. Verwenden Sie einen JDBC-Treiber , der JDBC 4.2 oder höher entspricht. Keine Notwendigkeit für Zeichenketten, keine Notwendigkeit für Klassen Java.sql.*.

Woher bekommen Sie die Java.time-Klassen?

2
Basil Bourque

in Java 7 Kalender eine Zeile

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(Calendar.getInstance().getTime())
0
Lucke