Как конвертировать временное смещение в местоположение / часовой пояс в Go - PullRequest
3 голосов
/ 29 марта 2019

Учитывая произвольное смещение времени, как можно создать пригодный для использования объект time.Location, который представляет это смещение времени?

Следующий код анализирует время с использованием смещения, ноfmt.Println(t.Location()) впоследствии не возвращает никакой информации:

func main() {
    offset := "+1100"

    t, err := time.Parse("15:04 GMT-0700","15:06 GMT"+offset)
    if err != nil {
        fmt.Println("fail", err)
    }
    fmt.Println(t)
    fmt.Println(t.UTC())
    fmt.Println(t.Location())
}

Детская площадка: https://play.golang.org/p/j_E28qJ8Vgy

В основном у меня есть некоторые временные данные со смещением времени, но без данных о местоположении я хочу создать time.Location объект для обеспечения записи смещения по Гринвичу.И затем сможет выводить время относительно фактического смещения времени расположения конечных пользователей.

Ответы [ 2 ]

4 голосов
/ 29 марта 2019

Использование:

loc := time.FixedZone("UTC+11", +11*60*60)

Затем установите в этом месте:

t = t.In(loc)

Попробуйте это :

package main

import (
    "fmt"
    "time"
)

func main() {
    loc := time.FixedZone("UTC+11", +11*60*60)

    t := time.Now()
    fmt.Println(t)
    fmt.Println(t.Location())

    t = t.In(loc)
    fmt.Println(t)
    fmt.Println(t.Location())

    fmt.Println(t.UTC())
    fmt.Println(t.Location())
}

Выход:

2009-11-10 23:00:00 +0000 UTC m=+0.000000001
UTC
2009-11-11 10:00:00 +1100 UTC+11
UTC+11
2009-11-10 23:00:00 +0000 UTC
UTC+11
2 голосов
/ 29 марта 2019
if len(offset) == 5 {
    hours, ok1 := strconv.ParseInt(offset[:3], 10, 0)
    mins, ok2 := strconv.ParseInt(offset[3:5], 10, 0)
    if ok1 == nil && ok2 == nil {
        t = t.In(time.FixedZone("Fixed", int((hours*60+mins)*60)))
        fmt.Println(t)
        fmt.Println(t.Location())
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...