Напечатанные даты отличаются, потому что они имеют разные часовые пояса.
time.Unix()
возвращает местное время , тогда как time.Parse()
:
Элементы, пропущенные из значения, предполагаются равными нулю или, если ноль невозможен, равны единице, поэтому при синтаксическом анализе «3:04 pm» возвращается время, соответствующее 1 января, год 0, 15:04: 00 UTC (обратите внимание, что поскольку год равен 0, это время предшествует нулевому времени).
time.Parse()
возвращает time.Time
с UTC
зоной напо умолчанию (если информация о зоне не является частью ввода и макета).
Это также объясняет, почему вы не можете видеть ее на игровой площадке Go: местное время UTC.
Печатьинформация о зоне на моем локальном компьютере (часовой пояс CET):
fmt.Println("control:", control1.Unix(), control1.Format("2006-01-02 -0700"))
fmt.Println("test :", test.Unix(), test.Format("2006-01-02 -0700"))
fmt.Println(control1.Zone())
fmt.Println(test.Zone())
Выходы:
control: 1546300800 2019-01-01 +0100
test : 1546300800 2019-01-01 +0000
CET 3600
UTC 0
Если вы оба раза переключаетесь на одну и ту же зону (например, UTC
или локальную),напечатанные даты будут одинаковыми:
control1 = control1.UTC()
test = test.UTC()
После этого выведите:
control: 1546300800 2019-01-01 +0000
test : 1546300800 2019-01-01 +0000
UTC 0
UTC 0