Как построить время. Время со смещением часового пояса в Go - PullRequest
0 голосов
/ 06 февраля 2019

Это пример даты из журнала Apache:

[07/Mar/2004:16:47:46 -0800]

Я успешно проанализировал это в год (int), месяц (time.Month), день (int), час (int),минуты (int), секунда (int) и часовой пояс (строка).

Как я могу построить время. Время так, чтобы оно включало смещение часового пояса -0800?

Это то, чтоДо сих пор у меня есть:

var nativeDate time.Time
nativeDate = time.Date(year, time.Month(month), day, hour, minute, second, 0, ????)

Что я должен использовать вместо ?????time.Local или time.UTC здесь не подходит.

1 Ответ

0 голосов
/ 06 февраля 2019

Вы можете использовать time.FixedZone() для построения time.Location с фиксированным смещением.

Пример:

loc := time.FixedZone("myzone", -8*3600)
nativeDate := time.Date(2019, 2, 6, 0, 0, 0, 0, loc)
fmt.Println(nativeDate)

Выход(попробуйте на Go Playground ):

2019-02-06 00:00:00 -0800 myzone

Если у вас есть смещение зоны в виде строки, вы можете использовать time.Parse() для ее анализа.Используйте строку макета, который содержит только опорную зону смещения:

t, err := time.Parse("-0700", "-0800")
fmt.Println(t, err)

Эти выходы (попробуйте его на Go Playground ):

1026

Как вы можетевидите, результат time.Time имеет смещение зоны -0800 часов.

Таким образом, наш оригинальный пример также может быть записан как:

t, err := time.Parse("-0700", "-0800")
if err != nil {
    panic(err)
}

nativeDate := time.Date(2019, 2, 6, 0, 0, 0, 0, t.Location())
fmt.Println(nativeDate)

Вывод (попробуйтеэто на Go Playground ):

2019-02-06 00:00:00 -0800 -0800
...