2016-09-16 1 views
3

Я не понимаю, такое поведения (или документ) этого: https://play.golang.org/p/vz2UTz-3YyЗачем идти в разборе моего штампа времени с местным местом вместо UTC

На детской площадке, она возвращает ожидаемые результаты:

t = 2015-06-01 00:00:00 +0000 UTC 
t.Location() = UTC 
parsed = 2015-06-01 00:00:00 +0000 UTC 
parsed.Location() = UTC 

на мой макинтош, я получаю:

t = 2015-06-01 00:00:00 +0000 +0000 
t.Location() = 
parsed = 2015-06-01 00:00:00 +0000 +0000 
parsed.Location() = 

проблема заключается в том, если я создаю свидание с

time.Date(2015, time.June, 01, 00, 0, 0, 0, time.UTC) 

2 раза разные, потому что у одного есть место («UTC»), а другое нет (или «Local»). Я немного потерялся здесь.

Благодаря

+1

Это даже странно для меня. Если я запускаю с часовым поясом, установленным в оболочке ('TZ = MSK go run foo.go'), он дает мне UTC. Кстати, если вы хотите, чтобы ваши даты были UTC, вы можете заменить '+00: 00' на' Z'. –

+0

Я не хочу, это выход json из postgresql (и он действителен) :) – Gravis

+0

Временной пакет издевается над игровой площадкой, результаты могут отличаться от реального времени выполнения - https://blog.golang.org/ детская площадка – foo

ответ

2

При разборе времени с зоной смещением, как -0700, если смещение соответствует временной зоне, используемой в текущем местоположении (Local), а затем использует эту Разбор местоположения и зон в возвращаемом время. В противном случае он записывает время как находящееся в сфабрикованном месте со временем, зафиксированным в заданном смещении зоны. [time.Parse]

t.Location (имя) устанавливается только тогда, когда локальное смещение соответствует смещению, что в разобранной строки даты. Вероятно, у вас есть другой часовой пояс.

Так что смещение записывается, но местоположение не просматривается.

+0

Мой английский должен быть слишком беден, потому что эта часть документа очень неясна для меня :( – Gravis

+0

проблема в том, что мне нужно сравнить эту метку времени. Она использует смещение +00: 00, поэтому я должен сравнить его с ' time.Date (2015, time.June, 01, 00, 0, 0, 0, time.UTC) '(мой тест не должен зависеть от моего местоположения). Здесь два раза отличаются :( – Gravis

+0

Затем используйте [' time.ParseInLocation'] (https://golang.org/pkg/time/#ParseInLocation). – nemo

Смежные вопросы