Я пытаюсь понять проблему с преобразованием времени на языке Go. Вот пример кода:
package main
import (
"fmt"
"time"
)
func unix2Str(ts int64) string {
const layout = "20060102"
t := time.Unix(ts, 0)
return t.Format(layout)
}
func unixTime(ts string) int64 {
const layout = "20060102"
t, err := time.Parse(layout, ts)
if err != nil {
fmt.Println(err)
return 0
}
return t.Unix()
}
func main() {
ts1 := "20110320"
ts2 := "20110321"
ut1 := unixTime(ts1)
ut2 := unixTime(ts2)
fmt.Println(ts1, ut1, unix2Str(ut1))
fmt.Println(ts2, ut2, unix2Str(ut2))
}
Он печатает следующий вывод:
20110320 1300579200 20110319
20110321 1300665600 20110320
Но так как я делаю преобразование из строкового формата в Unix и обратно, я ожидаю, что те же результаты для даты в строковом формате. Но это не так. Фактически, напечатанное время Unix 1300579200
преобразуется в Python в исходную дату, с которой я начал, например,
>>> time.strftime("%Y%m%d", time.gmtime(1300579200))
'20110320'
Это ошибка в коде Go или я что-то упустил?