【问题标题】:What's the difference between time.Now() and time.Now().Local()?time.Now() 和 time.Now().Local() 有什么区别?
【发布时间】:2019-05-23 04:51:49
【问题描述】:

我试图了解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() 上的文档,内容如下:

现在返回当前本地时间。

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

他们都返回当地时间,所以我仍然不确定有什么区别。我试着四处寻找,但我真的找不到确切的答案。

有人能解释一下吗?

【问题讨论】:

    标签: go time timezone


    【解决方案1】:

    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)。

    【讨论】:

    • 哇,我从来没有意识到挂钟和单调钟之间的区别。对于我正在编写的程序(遥控飞机的自学自动驾驶仪)来说,测量时间比告诉时间更重要。还有一个问题:time.Since() 使用单调时钟还是挂钟?而如果time.Since()使用挂钟,如何分辨两个时间对象之间单调时间的差异?
    • @kramer65 正如文档所说,“其他成语,例如 time.Since(start)、time.Until(deadline) 和 time.Now().Before(deadline),对挂钟重置具有同样的鲁棒性。”和Since()“是time.Now().Sub(t)的简写”。您可以减去两次 Times 并得到一个 Duration,这只是纳秒的计数。
    猜你喜欢
    • 2023-02-05
    • 2016-06-01
    • 2019-05-11
    • 2014-05-02
    • 1970-01-01
    • 2011-08-01
    • 2011-01-28
    • 2012-11-07
    • 1970-01-01
    相关资源
    最近更新 更多