Hallo Schneider.
Erstmal ein paar Grundsätzliche Gedanken
Unixzeit beginnt am 01.01.1970 00:00:00 und endet am 19.01.2038 mit einer Zeitbasis von 1 Sekunde
Unityzeit beginnt am 01.01.1990 00:00:00 mit einer Zeitbasis von 1 Millisekunde
alle Rechenoperationen im Zusammenhang der Zeit in Unity enden mit einer Variable vom Type "TIME" (UDINT) In ihr sind maximal 49 Tage darstellbar.
Unity stellt nicht in allen Versionen und allen Plattformen einen LINT (64 bit zur Verfügung)
Da die Unix Zeit schon weit vorangeschritten ist, kannst du aber nicht mehr in DINT rechnen.
UnixZeit * 1000 (für mSek in DT) würde DINT überschreiten.
Eine Möglichkeit die mir eingefallen ist, ist die Berechnung einer Referenzzeit in Unix, so dass man auf vernünftige Zahlen kommt.
Diese Referenzzeit sollte nicht weiter als 49 Tage von der zu erwartenden Zeit von Unix entfernt sein.
Code:
1. Auslesen der aktuellen DT (2016-08-04-15:30:00)
2.. Tag, Monat & Jahr merken
3. Referenzzeit basteln in DT (2016-08-01-00:00:00)
4. Von dieser Referenzzeit die UnixZeit bestimmen
[CODE]
2016 - 1970 = Anzahl Jahre (46)
Anzahl Jahre / 4 = Anzahl Schaltjahre (11)
Differenzzeit Jahre = Anzahl Jahre * 365 * 86400 (Ergibt die Differenz in Sekunden)
Differenz2 = (Anzahl Schaltjahre + Tag des Referenzdatums (1.8. = 213) ) * 86400
(Ist das aktuelle Jahr ein Schaltjahr und befindet sich das Referenzdatum nach dem 29.02. muss der Tag mit berücksichtigt werden)
Unixreferenz = Differenz Jahre + Differenz2 (1470009600)
Unixdifferenz (=201818) = Unixzeit (=1470211418) - Unixreferenz (=1470009600)
Unixdifferenz * 1000 -> konvertiert nach Zeit = 2d_8h_3_m_38s -> Addiert zur Referenzzeit = 2016-08-03-08:03:38
Da die Unixzeit immer UTC ist noch 2h drauf für die Lokalzeit
[/CODE]
Bleibt noch das Jahr 2038 Problem
Holger