2017-05-15 10 views
-1

Ich habe mit time.Time Objekte, die mit der falschen Zeitzone analysiert wurde. Sie haben intern eine UTC tz, aber die ursprünglichen Daten stammen aus einer alten MySQL-Datenbank, die Datumsangaben intern mit der Zeitzone Europe/Paris speichert.Ändern Sie time.Time Zeitzone ohne Reparieren

Ich möchte die interne Zeitzone der Zeit ändern, ohne sie zu reparieren. Ich habe die time.In() -Funktion ausprobiert, aber es löst meinen Anwendungsfall nicht, weil es die gleiche Zeit für eine andere Zeitzone zurückgibt.

Meine ultimative Lösung wäre, https://golang.org/pkg/time/#ParseInLocation zu verwenden, um das Datum aus dem Wert des Originals mit dem richtigen Speicherort neu zu erstellen. Wenn dies jedoch vermieden werden könnte, wäre dies besser.

Irgendwelche Gedanken?

Danke.

+0

Mit welchem ​​TZ soll es am Ende verbunden werden? UTC oder lokal? – captncraig

+0

@peterSO Die Frage ist klar und erfordert keinen Code für mich. Wenn Sie dem nicht zustimmen, können Sie den Eintrag ablehnen. –

+0

Wie ist das genaue Format in Ihrer Datenbank? Ist überhaupt ein TZ explizit damit verbunden? – captncraig

Antwort

0

Können Sie nur Add eine feste Offest zu ihnen?

t,_ := time.Parse(...) 
t = t.Add(-4 * time.Hour) // or whatever offset makes it work 

// t is now correct utc time 
// In should work less badly: 
localTime := t.In(myRealLocation) 
+0

Danke, das ist eine gute Führung. Irgendwelche Gedanken über DST mit diesem? Ich denke, es gibt keine Möglichkeit darüber zu wissen, da der MySQL-Datetime-Typ keinen tz/Offset speichert. –

+0

Ug. Die Zeit ist das Schlimmste. Sie haben wirklich lokale Zeitstempel, die sich an die Sommerzeit anpassen, ohne etwas über ihre Zeitzoneninformationen zu notieren? Wenn dem so ist, kann ich mir keine andere Möglichkeit vorstellen, als Daten zu überprüfen und den Offset anzupassen. – captncraig

+1

Das Speichern von Zeitmarken ohne Zeitzoneninformationen sollte eigentlich ein Kapitalverbrechen sein ... – Kaedys