time.Now()和time.Now()。Local()有什么区别?

时间:2018-12-23 19:06:13

标签: go time timezone

我试图了解time.Now()time.Now().Local()之间的区别。我首先将其打印在笔记本电脑上(运行Ubuntu 18.04):

fmt.Println(time.Now())
fmt.Println(time.Now().Local())

这给了我

2018-12-23 19:57:08.606595466 +0100 CET m=+0.000583834
2018-12-23 19:57:08.606667843 +0100 CET

我不确定m=+0.000583834是什么。也许我的机器和NTP服务器之间有区别?

然后我检出了.Now().Local()上的文档,其内容为:

  

现在返回当前本地时间。

  

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

他们两个都返回本地时间,所以我仍然不确定两者之间的区别。我尝试四处搜寻,但找不到真正的答案。

有人能对此有所启发吗?

1 个答案:

答案 0 :(得分:6)

time.Now().Local()将时间的Location设置为本地时间。 time.Now()已经设置为本地时间,因此除了m位之外没有任何净效果。

m部分是Monotonic Clock

  

操作系统既提供“挂钟”(可进行时钟同步更改),又提供“单调时钟”(不可更改)。通常的规则是,挂钟用于显示时间,单调时钟用于测量时间。

自程序启动以来,单调时钟基本上是一个简单的计数。 m=+0.000583834说时间是程序启动后0.000583834秒。

time.Now().Local() explicitly strips the monotonic clock ...

  

由于使用了t.In,t.Local和t.UTC来影响墙壁时间,因此它们还会从结果中剥离任何单调时钟读数。剥离单调时钟读数的典型方法是使用t = t.Round(0)。