Unix Timestamp zu Datetime konvertieren - OutOfRangeException

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von slice.

    Unix Timestamp zu Datetime konvertieren - OutOfRangeException

    Hi,
    ich habe folgenden Unix-Zeit: 1398884357609. Diese möchte ich zu einem DateTime Objekt konvertieren. Folgende Methode soll das Möglich machen:

    VB.NET-Quellcode

    1. Function ConvertTimestamp(ByVal timestamp As Double) As DateTime
    2. Return New DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(timestamp).ToLocalTime()
    3. End Function

    Das geht mit anderen Werten, die ich im Internet gefunden habe, aber nicht mit meinem:

    Quellcode

    1. ​Ein Ausnahmefehler des Typs "System.ArgumentOutOfRangeException" ist in mscorlib.dll aufgetreten.
    2. Zusätzliche Informationen: Der hinzuzufügende Wert war außerhalb des Bereichs.


    Zu erst dachte ich, der Timestamp ist einfach falsch. Aber wenn ich ihn auf dieser Seite eingebe, bekomme ich das richtige Datum.

    Gibt es in VB noch andere Methoden, das zu konvertieren, oder muss ich das aus ner Website auslesen?

    Würde mich über Hilfe freuen :)
    Mfg
    Vincent

    hmm... du machst "addseconds"... ist der timestamp nicht milliseconds?

    wenn ich dieses aufrufe:

    Quellcode

    1. AktDate = New DateTime(1970, 1, 1, 0, 0, 0, 0).AddMilliseconds(timestamp)
    2. Return AktDate.ToLocalTime()

    bekomme ich bei deinem Timestamp das Datum "30.04.2014 20.29.17" raus.
    ist das der richtige Wert?

    Edit:
    hmm.. anscheinend nicht.. was mir noch auffällt.
    Auf der Seite die die angegeben hast (erst später gesehen) hat der timestamp 10 Stellen, deiner den du angegeben hast hat 13 stellen.
    Da stimmt doch was von Hause aus nicht *wunder*

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „RoulettePilot“ ()

    Probier es mal so.

    VB.NET-Quellcode

    1. ​Option Strict On
    2. Public Class Form1
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. MessageBox.Show(UnixTimeStampToDateTime(1398884357609).ToString())
    5. End Sub
    6. Shared ReadOnly UnixEpoch As New DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)
    7. Shared ReadOnly MaxUnixSeconds As Double = (DateTime.MaxValue - UnixEpoch).TotalSeconds
    8. Public Shared Function UnixTimeStampToDateTime(unixTimeStamp As Double) As DateTime
    9. Return If(unixTimeStamp > MaxUnixSeconds, UnixEpoch.AddMilliseconds(unixTimeStamp), UnixEpoch.AddSeconds(unixTimeStamp))
    10. End Function
    11. End Class


    Quelle: stackoverflow.com/questions/24…o-datetime-and-vice-versa
    Ich bekomm da raus 30.04.2014 - 18:59:17 :)
    Kommando zurück!
    der code

    Quellcode

    1. Return New DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(timestamp).ToLocalTime()

    ist schon richtig.. du hast da was falsch mit DEINEM timestamp.. wie gesagt, der ist um 4 stellen zu groß
    Vielen Dank euch beiden.
    @LaMiy Methode hat dann funktioniert.
    Die Website scheint den Timestamp zu verkürzen, denn, wie @RoulettePilot gesagt hat, ist der zu groß. (komische Seite)
    Naja, jetzt funktioniert alles :)
    Mfg
    Vincent

    Das Problem liegt einzig und alleine an deinem falschen Timestamp - außer natürlich es ist beabsichtigt das der in der sehr weit entfernten Zukunft spielt ...

    Quellcode

    1. deiner: 1398884357609 = ??.??.???? ??:??:??
    2. meiner: 253402297199 = 31.12.9999 23:59:59