langer Zeitstempel zu LocalDateTime

Lesezeit: 2 Minuten

Benutzer-Avatar
Zufall

Ich habe einen langen Zeitstempel 1499070300 (entspricht Mo, 03. Juli 2017 16:25:00 +0800), aber wenn ich ihn in LocalDateTime umwandle, erhalte ich 1970-01-18T16:24:30.300

Hier ist mein Code

long test_timestamp = 1499070300;

LocalDateTime triggerTime =
                LocalDateTime.ofInstant(Instant.ofEpochMilli(test_timestamp), TimeZone
                        .getDefault().toZoneId());

  • langer test_timestamp = 1499070300l;??

    – Akshay

    3. Juli 2017 um 10:40 Uhr

  • Verwenden ZoneId.systemDefault() Anstatt von TimeZone.getDefault().toZoneId()

    – Joda Stephen

    3. Juli 2017 um 10:44 Uhr

  • Sie sind nicht der Erste, der einen nach einem solchen Fehler fragt. Beispiel: SimpleDateFormat gibt immer 1970.01.17 mit falscher Zeitzone zurück.

    – Ole VV

    3. Juli 2017 um 11:14 Uhr

  • Ähnlich: Konvertieren eines 19-stelligen Unix-Zeitstempels in ein lesbares Datum

    – Basilikum Bourque

    23. Mai 2019 um 15:50 Uhr

Benutzer-Avatar
Juan

Sie müssen den Zeitstempel in Millisekunden übergeben:

long test_timestamp = 1499070300000L;
LocalDateTime triggerTime =
        LocalDateTime.ofInstant(Instant.ofEpochMilli(test_timestamp), 
                                TimeZone.getDefault().toZoneId());  

System.out.println(triggerTime);

Ergebnis:

2017-07-03T10:25

Oder verwenden ofEpochSecond stattdessen:

long test_timestamp = 1499070300L;
LocalDateTime triggerTime =
       LocalDateTime.ofInstant(Instant.ofEpochSecond(test_timestamp),
                               TimeZone.getDefault().toZoneId());   

System.out.println(triggerTime);

Ergebnis:

2017-07-03T10:25

  • Vielen Dank. das habe ich vermisst

    – zufällig

    3. Juli 2017 um 10:54 Uhr

  • Übrigens, wenn Sie AndroidThreeTen verwenden, ersetzen Sie TimeZone.getDefault().toZoneId() mit DateTimeUtils.toZoneId(TimeZone.getDefault()).

    – Louis Tsai

    20. März 2018 um 9:29 Uhr

Versuche es mal mit folgendem..

long test_timestamp = 1499070300000L;
    LocalDateTime triggerTime =
            LocalDateTime.ofInstant(Instant.ofEpochMilli(test_timestamp), TimeZone
                    .getDefault().toZoneId());  

Standardmäßig 1499070300000 ist int, wenn es am Ende kein l enthält. Übergeben Sie auch die Zeit in Millisekunden.

Wenn Sie den Back-Port von Android Threeten verwenden, ist die gewünschte Zeile diese

LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), ZoneId.systemDefault())

Benutzer-Avatar
Razib

Versuche es mit Instant.ofEpochMilli() oder Instant.ofEpochSecond() Methode damit-

long test_timestamp = 1499070300L;
LocalDateTime date =
    LocalDateTime.ofInstant(Instant.ofEpochMilli(test_timestamp ), TimeZone
        .getDefault().toZoneId());

Ihr Problem ist, dass der Zeitstempel nicht in Millisekunden, sondern in Sekunden ab dem Epochendatum ausgedrückt wird. Multiplizieren Sie entweder Ihren Zeitstempel mit 1000 oder verwenden Sie die Instant.ofEpochSecond().

Benutzer-Avatar
Nasib

EINFACHE und geradlinige Lösung wird (KOTLIN)

            val timeStamp:Long=559585985988
            val sdf = SimpleDateFormat("hh:mm:ss a - MMM dd,yyyy", Locale.getDefault())
            val tz = TimeZone.getDefault()
            val now = Date()
            val offsetFromUtc = tz.getOffset(now.time)
            val localeTimeStr = sdf.format(timeStamp + offsetFromUtc) //add the offset to get the local time from the epoch timestamp

1245030cookie-checklanger Zeitstempel zu LocalDateTime

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy