794 Stimmen

Wie erhält man die aktuelle Zeit im Format JJJJ-MM-TT HH:MI:Sek.Millisekunden in Java?

Der folgende Code zeigt mir die aktuelle Zeit an. Aber er sagt nichts über Millisekunden aus.

public static String getCurrentTimeStamp() {
    SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//dd/MM/yyyy
    Date now = new Date();
    String strDate = sdfDate.format(now);
    return strDate;
}

Ich habe ein Datum im Format YYYY-MM-DD HH:MM:SS ( 2009-09-22 16:47:08 ).

Ich möchte aber die aktuelle Zeit im Format abrufen YYYY-MM-DD HH:MM:SS.MS ( 2009-09-22 16:47:08.128 , donde 128 sind die Millisekunden).

SimpleTextFormat wird gut funktionieren. Hier ist die kleinste Zeiteinheit die Sekunde, aber wie bekomme ich auch die Millisekunde?

37 Stimmen

Wenn alles andere versagt, lesen Sie die Dokumentation .

6 Stimmen

Zu Ihrer Information: Die lästigen alten Datum-Zeit-Klassen wie java.util.Date , java.util.Calendar y java.text.SimpleTextFormat sind jetzt Erbe , ersetzt durch die java.time Klassen. Siehe Anleitung von Oracle .

1201voto

JayJay Punkte 11765
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

251voto

Joram Punkte 3026

Ein Java-One-Liner

public String getCurrentTimeStamp() {
    return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());
}

im JDK8-Stil

public String getCurrentLocalDateTimeStamp() {
    return LocalDateTime.now()
       .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
}

118voto

Michael Borgwardt Punkte 334642

Sie müssen nur das Millisekundenfeld in Ihre Datumsformatzeichenfolge aufnehmen:

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

El API-Dokument von SimpleDateFormat beschreibt die Formatzeichenfolge im Detail.

48voto

duggu Punkte 36991

Versuchen Sie dies:-

http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
Date date = new Date();
System.out.println(dateFormat.format(date));

oder

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));

44voto

Basil Bourque Punkte 256611

Tl;dr

Instant.now()
       .toString()

2016-05-06T23:24:25.694Z

ZonedDateTime
.now
( 
    ZoneId.of( "America/Montreal" ) 
)
.format(  DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " )

2016-05-06 19:24:25.694

java.time

In Java 8 und später haben wir die java.time Framework, das in Java 8 und höher integriert ist. Diese neuen Klassen ersetzen die lästigen alten java.util.Date/.Calendar-Klassen. Die neuen Klassen sind inspiriert von der sehr erfolgreichen Joda-Time Framework, das als sein Nachfolger gedacht ist, vom Konzept her ähnlich, aber mit einer neuen Architektur. Definiert von JSR 310 . Erweitert um den DreiZehn-Extra Projekt. Siehe die Tutorial .

Beachten Sie, dass java.time in der Lage ist Nanosekunde Auflösung (9 Dezimalstellen im Sekundenbruchteil), gegenüber der Millisekunde Auflösung (3 Dezimalstellen) von java.util.Date & Joda-Time. Wenn Sie also so formatieren, dass nur 3 Dezimalstellen angezeigt werden, könnten Sie Daten verstecken.

Wenn Sie Mikro- oder Nanosekunden aus Ihren Daten entfernen möchten, kürzen Sie diese.

Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ;

Die java.time-Klassen verwenden ISO 8601 Format beim Parsen/Erzeugen von Zeichenketten. A Z am Ende ist die Abkürzung für Zulu und bedeutet UTC .

Eine Instant stellt einen Zeitpunkt auf der Zeitachse in UTC mit einer Auflösung von bis zu Nanosekunden . Den aktuellen Moment einfangen in Java 8 ist begrenzt auf Millisekunden mit einer neuen Implementierung in Java 9, die abhängig von den Fähigkeiten der Hardware-Uhr Ihres Computers bis zu Nanosekunden erfasst.

Instant instant = Instant.now (); // Current date-time in UTC.
String output = instant.toString ();

2016-05-06T23:24:25.694Z

Ersetzen Sie die T in der Mitte mit einem Leerzeichen, und die Z mit nichts, um das gewünschte Ergebnis zu erzielen.

String output = instant.toString ().replace ( "T" , " " ).replace( "Z" , "" ; // Replace 'T', delete 'Z'. I recommend leaving the `Z` or any other such [offset-from-UTC][7] or [time zone][7] indicator to make the meaning clear, but your choice of course.

2016-05-06 23:24:25.694

Da Sie sich nicht um die Angabe des Offsets oder der Zeitzone kümmern, erstellen Sie eine "lokale" Datumszeit ohne Bezug zu einem bestimmten Ort.

String output = LocalDateTime.now ( ).toString ().replace ( "T", " " );

Joda-Time

Die sehr erfolgreiche Joda-Time Bibliothek war die Inspiration für das java.time Framework. Es ist ratsam, auf java.time zu migrieren, wenn dies sinnvoll ist.

El ISO 8601 Format enthält Millisekunden und ist der Standard für die Joda-Time 2.4 Bibliothek.

System.out.println( "Now: " + new DateTime ( DateTimeZone.UTC ) );

Wenn es läuft

Now: 2013-11-26T20:25:12.014Z

Bei Bedarf können Sie auch den Bruchteil einer Millisekunde als Zahl angeben:

int millisOfSecond = myDateTime.getMillisOfSecond ();

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