doushifen4060
2019-01-04 08:26
浏览 589
已采纳

为什么在OpenWRT上运行Golang的time.Now()总是获得UTC时间?

I wrote a Golang program that runs on OpenWRT.

package main

import (
    "fmt"
    "time"
)

func main(){
    fmt.Println(time.Now())
}

When I run this program on my Macbook, I always get the correct local time.

However, when running this program on OpenWRT, I always get UTC time.

I have set the time zone and time of OpenWRT. When I execute uci show system, I can see the right time zone. When I execute date the right local time can be display correctly.

So my question is, how do I get the correct local time using Golang's time.Now() on OpenWRT?

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

我编写了一个在OpenWRT上运行的Golang程序。

  包main 
 
import(
“ fmt” 
“ time” 
)
 
func main(){
 fmt.Println(time.Now())
} 
  <  / pre> 
 
 

当我在Macbook上运行该程序时,我总是得到正确的本地时间。

但是,在OpenWRT上运行此程序时,我总是得到 UTC时间。

我已经设置了OpenWRT的时区和时间。 当我执行 uci show system 时,我可以看到正确的时区。 当我执行 date 时,正确的本地时间可以正确显示。

所以我的问题是,如何使用Golang的时间获取正确的本地时间。 )在OpenWRT上?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dsvcqvp139098 2019-01-04 10:10
    已采纳

    The root of my problem is that my OpenWRT lacks the zoneinfo package. So I run opkg update && opkg install zoneinfo-xxx first.

    This is part of go/src/time/zoneinfo_unix.go:

    func initLocal() {
        // consult $TZ to find the time zone to use.
        // no $TZ means use the system default /etc/localtime.
        // $TZ="" means use UTC.
        // $TZ="foo" means use /usr/share/zoneinfo/foo.
    
        ...
    
    }
    

    According to this file, if there is no "TZ" variable, Golang will use the time zone pointed to by /etc/localtime when calling time.Now().

    Then I set time zone at /etc/config/system (option zonename 'xxxxxx') and run /etc/init.d/system restart. Finally, I can get the correct time.Now().

    已采纳该答案
    打赏 评论
  • dongxian6741 2019-01-04 08:54

    OpenWRT stores the time zone inside a file named /etc/TZ. If this file is missing or empty, OpenWRT assumes the local time equals UTC time. Source

    how do I get the correct local time using Golang's time.Now() on OpenWRT?

    Specifying the Time Zone with TZ

    The is the value you must add to or substract from the local time to get the UTC time. This offset will be positive if the local time zone is west of the Prime Meridian and negative if it is east.

    打赏 评论

相关推荐 更多相似问题