douguwo2275
2019-03-29 06:21
浏览 178
已采纳

如何在Go中将时间偏移转换为位置/时区

Given an arbitrary time offset, how does one go about creating a usable time.Location object that represents that time offset?

The following code parses a time using an offset, but fmt.Println(t.Location()) subsequently returns no information:

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())
}

Playground: https://play.golang.org/p/j_E28qJ8Vgy

Basically I have some time data with time offsets, but without location data, I want to create a time.Location object to ensure the GMT offset is recorded. And then be able to output the time relative to the end users actual location time offset.

图片转代码服务由CSDN问答提供 功能建议

鉴于任意时间偏移,如何创建可用的 time.Location 代表该时间偏移量的对象?

以下代码使用偏移量解析时间,但 fmt.Println(t.Location())随后不返回任何信息:

  func main(){  
偏移量:=“ +1100” 
 
t,错误:= 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())
} 
 <  / code>  
 
 

游乐场: https://play.golang。 org / p / j_E28qJ8Vgy

基本上我有一些带有时间偏移量的时间数据,但是没有位置数据,我想创建一个 time.Location 对象,以确保记录了GMT偏移量。 然后能够输出相对于最终用户实际位置的时间偏移量。

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • doufu3718 2019-03-29 07:48
    已采纳

    Use:

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

    Then set to this location:

    t = t.In(loc)
    

    Try this:

    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())
    }
    

    Output:

    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
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • douruobokui58233 2019-03-29 07:58
    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())
        }
    }
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题