Der folgende Code gibt die aktuelle Uhrzeit an. Es sagt jedoch 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 bekomme Datum im Format 2009-09-22 16:47:08
(JJJJ-MM-TT HH: MI: Sec) .
Aber ich möchte die aktuelle Uhrzeit im Format 2009-09-22 16:47:08.128
((JJJJ-MM-TT HH: MI: Sec.Ms) abrufen - wobei 128 die Millisekunde angibt.
SimpleTextFormat
wird gut funktionieren. Hier ist die niedrigste Zeiteinheit die Sekunde, aber wie bekomme ich auch Millisekunde?
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Ein Java-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"));
}
Sie müssen nur das Millisekundenfeld in Ihrer Datumsformatzeichenfolge hinzufügen:
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Das API-Dokument von SimpleDateFormat beschreibt die Formatzeichenfolge im Detail.
versuche 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()));
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
In Java 8 und höher haben wir das Java.time - Framework in Java 8 und höher eingebaut. Diese neuen Klassen ersetzen die lästigen alten Java.util.Date/.Calendar-Klassen. Die neuen Klassen sind vom sehr erfolgreichen Joda-Time Framework inspiriert, das als Nachfolger gedacht ist, im Konzept ähnlich ist, aber neu gestaltet wurde. Definiert durch JSR 310 . Erweitert um das Projekt ThreeTen-Extra . Siehe das Tutorial .
Beachten Sie, dass Java.time Nanosekunden Auflösung (9 Dezimalstellen in Sekundenbruchteilen) gegenüber der Millisekunde Auflösung (3 Dezimalstellen) von Java.util.Date & Joda-Time unterstützt. Wenn Sie also nur 3 Dezimalstellen formatieren, können Sie Daten ausblenden.
Wenn Sie Mikrosekunden oder Nanosekunden aus Ihren Daten entfernen möchten, schneiden Sie sie ab.
Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ;
Die Java.time-Klassen verwenden standardmäßig das ISO 8601 - Format, wenn Strings analysiert/generiert werden. Eine Z
am Ende ist eine Abkürzung für Zulu
und bedeutet UTC .
Eine Instant
steht für einen Moment auf der Zeitleiste in UTC mit einer Auflösung von bis zu Nanosekunden . Das Erfassen des aktuellen Moments in Java 8 ist auf Millisekunden beschränkt , wobei eine neue Implementierung in Java 9 bis zu Nanosekunden aufnimmt, je nach den Fähigkeiten der Hardware-Uhr Ihres Computers.
Instant instant = Instant.now (); // Current date-time in UTC.
String output = instant.toString ();
2016-05-06T23: 24: 25.694Z
Ersetzen Sie die Variable T
durch ein Leerzeichen und die Variable Z
durch nichts, um die gewünschte Ausgabe zu erhalten.
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 es Ihnen nicht wichtig ist, den Versatz oder die Zeitzone einzubeziehen, machen Sie ein "lokales" Datum und eine Uhrzeit, die sich nicht auf einen bestimmten Ort beziehen.
String output = LocalDateTime.now ( ).toString ().replace ( "T", " " );
Die überaus erfolgreiche Joda-Time-Bibliothek war die Inspiration für das Java.time-Framework. Ratsam ist eine Migration auf Java.time, wenn dies sinnvoll ist.
Das Format ISO 8601 enthält Millisekunden und ist die Standardeinstellung für die Bibliothek Joda-Time 2.4.
System.out.println( "Now: " + new DateTime ( DateTimeZone.UTC ) );
Wann laufen…
Now: 2013-11-26T20:25:12.014Z
Bei Bedarf können Sie auch den Millisekunden-Sekundenbruchteil als Zahl abfragen:
int millisOfSecond = myDateTime.getMillisOfSecond ();
Der einfachste Weg war (vor Java 8) zu verwenden,
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
SimpleDateFormat ist jedoch nicht threadsicher. Weder Java.util.Date . Dies führt zu möglichen Parallelitätsproblemen für Benutzer. Und es gibt viele Probleme in diesen bestehenden Designs. Um diese Probleme jetzt in Java 8 zu überwinden, haben wir ein separates Paket namens Java.time . Dieses Java SE 8-Dokument mit Datum und Uhrzeit bietet einen guten Überblick.
In Java 8 wird also etwas wie das Folgende tun (um das aktuelle Datum/die aktuelle Uhrzeit zu formatieren),
LocalDateTime.now()
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
Bemerkenswert ist, dass es mit Hilfe der beliebten Drittanbieter-Bibliothek joda-time entwickelt wurde.
Das Projekt wurde gemeinsam von den Autoren Joda-Time (Stephen Colebourne) und Oracle unter JSR 310 durchgeführt und wird im neuen Java SE 8-Paket Java.time erscheinen.
Nun wird der joda-time
jedoch veraltet und die Benutzer werden aufgefordert, auf den neuen Java.time
zu migrieren.
Beachten Sie, dass Benutzer ab Java SE 8 aufgefordert werden, zu Java.time (JSR-310) zu migrieren - einem Kernbestandteil des JDK, der dieses Projekt ersetzt
Wie auch immer, das gesagt,
Wenn Sie eine Calendar -Instanz haben, können Sie diese unten in den neuen Java.time
konvertieren.
Calendar calendar = Calendar.getInstance();
long longValue = calendar.getTimeInMillis();
LocalDateTime date =
LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());
String formattedString = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
System.out.println(date.toString()); // 2018-03-06T15:56:53.634
System.out.println(formattedString); // 2018-03-06 15:56:53.634
Wenn Sie ein Date-Objekt hatten,
Date date = new Date();
long longValue2 = date.getTime();
LocalDateTime dateTime =
LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue2), ZoneId.systemDefault());
String formattedString = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
System.out.println(dateTime.toString()); // 2018-03-06T15:59:30.278
System.out.println(formattedString); // 2018-03-06 15:59:30.278
Wenn Sie gerade die Epoche Millisekunden hatten,
LocalDateTime date =
LocalDateTime.ofInstant(Instant.ofEpochMilli(epochLongValue), ZoneId.systemDefault());
Ich würde so etwas verwenden:
String.format("%tF %<tT.%<tL", dateTime);
Die Variable dateTime
kann ein beliebiger Datums- und/oder Zeitwert sein, siehe JavaDoc für Formatter
.
Um die obigen Antworten zu ergänzen, finden Sie hier ein kleines Arbeitsbeispiel eines Programms, das die aktuelle Uhrzeit und das aktuelle Datum einschließlich Millisekunden ausgibt.
import Java.text.SimpleDateFormat;
import Java.util.Date;
public class test {
public static void main(String argv[]){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date now = new Date();
String strDate = sdf.format(now);
System.out.println(strDate);
}
}
Sie können es einfach in dem gewünschten Format erhalten.
String date = String.valueOf(Android.text.format.DateFormat.format("dd-MM-yyyy", new Java.util.Date()));
Das Dokument in Java 8 nennt es Sekundenbruchteil , während es in Java 6 Millisekunde heißt. Das brachte mich zur Verwirrung
Verwenden Sie diese Option, um Ihre aktuelle Uhrzeit im angegebenen Format abzurufen:
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.print(dateFormat.format(System.currentTimeMillis())); }
Ich sehe keinen Hinweis darauf:
SimpleDateFormat f = new SimpleDateFormat("yyyyMMddHHmmssSSS");
das obige Format ist ebenfalls nützlich.