it-swarm.com.de

Java-Zeit seit der Epoche

Wie kann ich in Java die Zeit seit der angegebenen Epoche in Sekunden und Nanosekunden im folgenden Format ausdrucken:

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

Meine Eingabe ist:

long mnSeconds;
long mnNanoseconds;

Wobei die Summe der beiden die seit der Epoche 1970-01-01 00:00:00.0 verstrichene Zeit ist.

13
user1585643

Du kannst das

public static String format(long mnSeconds, long mnNanoseconds) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.");
    return sdf.format(new Date(mnSeconds*1000))
           + String.format("%09d", mnNanoseconds);
}

z.B.

2012-08-08 19:52:21.123456789

wenn Sie nicht wirklich mehr als Millisekunden benötigen, können Sie dies tun

public static String format(long mnSeconds, long mnNanoseconds) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    return sdf.format(new Date(mnSeconds*1000 + mnNanoseconds/1000000));
}
9
Peter Lawrey

Verwenden Sie dies und dividieren Sie durch 1000

long Epoch = System.currentTimeMillis();

System.out.println("Epoch : " + (Epoch / 1000));
18

tl; dr

    Instant                        // Represent a moment in UTC.
    .ofEpochSeconds( mnSeconds )   // Determine a moment from a count of whole seconds since the Unix Epoch of the first moment of 1970 in UTC (1970-01-01T00:00Z). 
    .plusNanos( mnNanoseconds )    // Add on a fractional second as a count of nanoseconds. Returns another `Instant` object, per Immutable Objects pattern.
    .toString()                    // Generate text representing this `Instant` object in standard ISO 8601 format.
    .replace( "T" , " " )          // Replace the `T` in the middle with a SPACE. 
    .replace "Z" , "" )            // Remove the `Z` on the end (indicating UTC).

Java.time

Das Java.time - Framework ist in Java 8 und höher integriert. Diese Klassen ersetzen die alten störenden Datum-Zeit-Klassen wie Java.util.Date, .Calendar, Java.text.SimpleDateFormat, Java.sql.Date und mehr. Das Team Joda-Time empfiehlt auch die Migration zu Java.time.

Instant

Die Klasse Instant repräsentiert einen Moment auf der Zeitleiste in UTC mit einer Auflösung von bis zu Nanosekunden.

long mnSeconds = … ;
long mnNanoseconds = … ;

Instant instant = Instant.ofEpochSeconds( mnSeconds ).plusNanos( mnNanoseconds );

Rufen Sie Instant::toString auf, um einen String zu erhalten, der diesen Datums-/Zeitwert darstellt.

String output = instant.toString();

Sie erhalten einen Wert wie 2011-12-03T10:15:30.987654321Z, Standard ISO 8601 . Ersetzen Sie die Variable T durch ein Leerzeichen, wenn Sie möchten. Suchen Sie für andere Formate Stack Overflow, um mehr über DateTimeFormatter zu erfahren. 


Über Java.time

Das Java.time - Framework ist in Java 8 und höher integriert. Diese Klassen ersetzen die störenden alten legacy -Date-Time-Klassen wie Java.util.Date , Calendar , & SimpleDateFormat .

Das Projekt Joda-Time , jetzt im Wartungsmodus , empfiehlt die Migration zu den Java.time -Klassen.

Weitere Informationen finden Sie unter Oracle Tutorial . Durchsuchen Sie den Stack Overflow nach vielen Beispielen und Erklärungen. 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 Zeichenfolgen, keine Java.sql.*-Klassen erforderlich.

Wo erhalten Sie die Java.time-Klassen? 

Das Projekt ThreeTen-Extra erweitert Java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Erweiterungen von Java.time. Hier finden Sie nützliche Klassen wie Interval , YearWeek , YearQuarter und more .

7
Basil Bourque

Es hängt etwas von den Werten von mnSeconds und mnNanoseconds ab, aber Sie müssen mit einem Formatierer wie diesem (der Millisekundengenauigkeit hat) nur ein Java.util.Date erstellen. Wenn mnNanoseconds die Anzahl der Nanosekunden über Ihren mnSeconds ist, würde ich davon ausgehen, dass es ungefähr so ​​ist 

Date d = new Date(mnSeconds*1000+mnNanosecods/1000000)

Dann müssen Sie es mit dem Formatierer formatieren, bevor Sie es drucken.

1
Fredrik

Die Klasse Java.util.Date verfügt über einen Konstruktor, der die Millisekunden der Epoche akzeptiert.

Überprüfen Sie das Java-Dokument und versuchen Sie es zu nutzen.

1
sundar

Sie können verwenden

new Java.util.Date(mnSeconds);

und dann SimpleDateFormat , um Ihre Ausgabe zu formatieren.

Nanosekunden werden von Date nicht unterstützt. Sie müssen manuell Nanosekunden hinzufügen oder ein Framework verwenden (gibt es eines?).

0
John Smith