获取给定时区的时间戳。

huangapple go评论130阅读模式
英文:

Get given timezone timestamp

问题

我正在玩时区,并注意到一些奇怪的事情。

我目前处于BST时区,比GMT提前一个小时。

        now := time.Now()
		location, _ := time.LoadLocation("Atlantic/Cape_Verde")
		timeAtZone := now.In(location)
		fmt.Println(timeAtZone)
		timestamp = timeAtZone.Unix()
		fmt.Println(timestamp)
		fmt.Println(now.Add(-time.Hour).UTC().Unix())
		fmt.Println(now.UTC().Unix())

你会注意到时间戳是BST我的当前时区的时间戳。

如何获取GMT的时间戳?

http://play.golang.org/p/oq0IRYa0h7

英文:

I am playing around with timezone and noticed something wierd.

I am currently in the BST timezone which is an hour ahead of GMT.

        now := time.Now()
		location, _ := time.LoadLocation("Atlantic/Cape_Verde")
		timeAtZone := now.In(location)
		fmt.Println(timeAtZone)
		timestamp = timeAtZone.Unix()
		fmt.Println(timestamp)
		fmt.Println(now.Add(-time.Hour).UTC().Unix())
		fmt.Println(now.UTC().Unix())

You will notice that the timestamp is that of BST my current timezone.

How do I get the timestamp of GMT???

http://play.golang.org/p/oq0IRYa0h7

答案1

得分: 8

Unix时间是绝对的。没有"BST Unix时间"。没有"Atlantic/Cape_Verde Unix时间"。只有Unix时间。它是从特定时刻(协调世界时(UTC)1970年1月1日星期四00:00:00,不计闰秒)以来的秒数。

时区与时间的表示有关,而不是时间本身。对于你和我来说,不管我们在世界的哪个地方(暂且不考虑爱因斯坦),这一刻都是相同的。我们只是碰巧称呼这个时刻的方式不同。在*Time上设置位置只是指示您希望如何显示时间。因此,如果您所说的"时间戳"是指"表示时间的字符串",您可以使用time.Now().UTC().String()获取UTC时间戳。

英文:

Unix time is absolute. There is no "BST Unix time." There is no "Atlantic/Cape_Verde" Unix time." There is only Unix time. It is the number of seconds since a specific moment (00:00:00 Coordinated Universal Time (UTC), Thursday, 1 January 1970, not counting leap seconds).

Time zones are related to the representation of time, not time itself. It is the same moment for you as it is for me, wherever we are in the world (leaving Einstein aside for the moment). We just happen to call that moment different things. Setting the location on a *Time just indicates how you would like to display the time. So if by "timestamp" you mean "string representing the time," you can get the UTC timestamp with time.Now().UTC().String().

答案2

得分: 1

请确保您检查了错误,我假设它告诉您存在问题。

您是否检查了:http://golang.org/pkg/time/#LoadLocation

您的时区是否在:$GOROOT/lib/time/zoneinfo.zip 中?

对于我来说:

time.LoadLocation("CDT") // 我的时区
time.LoadLocation("CST")

两者都会导致错误。

要获取我的时区,我必须执行:

time.LoadLocation("America/Chicago")

请确保 f.Timezone 是有效的。

英文:

Make sure you check your errors, I assume it's telling you there's an issue.

Have you checked: http://golang.org/pkg/time/#LoadLocation

Is your timezone in: $GOROOT/lib/time/zoneinfo.zip?

For me:

time.LoadLocation("CDT") // my time zone
time.LoadLocation("CST")

Both result in an error.

To get my time zone, I must do:

time.LoadLocation("America/Chicago")

Make sure f.Timezone is valid.

huangapple
  • 本文由 发表于 2015年7月27日 19:37:42
  • 转载请务必保留本文链接:https://go.coder-hub.com/31652070.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定