如何提取当前本地时间偏移量的值?

问题描述 投票:8回答:3

我在尝试格式化和显示一些IBM大型机TOD时钟数据时有些费力。我想同时在GMT和本地时间设置数据格式(默认设置-否则在用户指定的区域中)。

为此,我需要从GMT获取本地时间偏移量的值,以秒为单位的有符号整数。

在zoneinfo.go(我承认我不太了解),我可以看到

// A zone represents a single time zone such as CEST or CET.
type zone struct {
    name   string // abbreviated name, "CET"
    offset int    // seconds east of UTC
    isDST  bool   // is this zone Daylight Savings Time?
}

但是我认为这不是导出的,因此此代码不起作用:

package main
import ( "time"; "fmt" )

func main() {
    l, _ := time.LoadLocation("Local")
    fmt.Printf("%v\n", l.zone.offset)
}

是否有一种简单的方法来获取此信息?

go timezone-offset
3个回答
19
投票

您可以在时间类型上使用Zone()方法:

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Now()
    zone, offset := t.Zone()
    fmt.Println(zone, offset)
}

Zone计算在时间t生效的时区,返回时区的缩写名称(例如“ CET”)及其在UTC以东的秒数内的偏移量。


9
投票

Package time

func (Time) Local

func (t Time) Local() Time

本地返回t,并且位置设置为本地时间。

func (Time) Zone

func (t Time) Zone() (name string, offset int)

Zone计算在时间t生效的时区,并返回区域的缩写名称(例如“ CET”)及其偏移量(以秒为单位)UTC以东。

type Location

type Location struct {
        // contains filtered or unexported fields
}

A Location将时刻映射到当时正在使用的区域。通常,位置表示时间偏移量的集合在地理区域使用,例如中欧的CEST和CET。

var Local *Location = &localLoc

Local表示系统的本地时区。

var UTC *Location = &utcLoc

UTC代表世界标准时间(UTC)。

func (Time) In

func (t Time) In(loc *Location) Time

In返回t,并且位置信息设置为loc。

如果loc为零,则处于恐慌状态。

例如,

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Now()

    // For a time t, offset in seconds east of UTC (GMT)
    _, offset := t.Local().Zone()
    fmt.Println(offset)

    // For a time t, format and display as UTC (GMT) and local times.
    fmt.Println(t.In(time.UTC))
    fmt.Println(t.In(time.Local))
}

输出:

-18000
2016-01-24 16:48:32.852638798 +0000 UTC
2016-01-24 11:48:32.852638798 -0500 EST

4
投票

我认为手动将时间转换为另一个TZ没有意义。使用time.Time.In功能:

package main

import (
    "fmt"
    "time"
)

func printTime(t time.Time) {
    zone, offset := t.Zone()
    fmt.Println(t.Format(time.Kitchen), "Zone:", zone, "Offset UTC:", offset)
}

func main() {
    printTime(time.Now())
    printTime(time.Now().UTC())

    loc, _ := time.LoadLocation("America/New_York")
    printTime(time.Now().In(loc))
}
© www.soinside.com 2019 - 2024. All rights reserved.