Каждое Time имеет соответствующее Location, которое используется для отображения.
Метод In возвращает время с определенным местоположением (location). Изменение местоположения таким образом изменяет только представление; это не меняет момент во времени.
Вот удобная функция, которая изменяет местоположение, связанное со временем.
// TimeIn возвращает время в UTC, если name "" или "UTC".
// Возвращает местное время, если name "Local".
// В противном случае name принимается
// за name местоположения в базе данных часового пояса IANA,
// например, "Africa/Lagos".
func TimeIn(t time.Time, name string) (time.Time, error) {
loc, err := time.LoadLocation(name)
if err == nil {
t = t.In(loc)
}
return t, err
}
В использовании:
for _, name := range []string{
"",
"Local",
"Asia/Shanghai",
"America/Metropolis",
} {
t, err := TimeIn(time.Now(), name)
if err == nil {
fmt.Println(t.Location(), t.Format("15:04"))
} else {
fmt.Println(name, "<time unknown>")
}
}
UTC 19:32
Local 20:32
Asia/Shanghai 03:32
America/Metropolis <time unknown>
Предупреждение. Переход на летнее время пропускается или повторяется время. Например, в Соединенных Штатах 13 марта 2011 г. 2:15am никогда не происходило, а 6 ноября 2011 г. 1:15am происходило дважды. В таких случаях выбор часового пояса и, следовательно, времени не является четко определенным. Date возвращает время, которое является правильным в одной из двух зон, участвующих в переходе, но не гарантирует, какая именно.
Читайте также:
Комментариев нет:
Отправить комментарий