【问题标题】:Go: why does time.Now().Hour/Minute/Second return a six digit number?Go:为什么 time.Now().Hour/Minute/Second 返回一个六位数?
【发布时间】:2016-04-03 10:47:22
【问题描述】:

我正在学习如何在 Go 中编写代码并尝试创建一个简单的提醒功能。

我想将当前时间显示为常规的 24 小时制 XX.XX(小时、分钟)。

我已将当前时间保存在变量 t 中,当我打印它时,我发现时间是 2009 年 11 月上旬的 23 点。很好,但是当我打印 t.Hour 和 t.Minute 时,结果是 132288.132480

当我打印t.Seconds 时,情况类似。我一直无法弄清楚为什么会发生这种情况。

从那以后大约已经过去了 2000 天,但这只是 48k 小时和 2880k 分钟,因此我的结果中小时和分钟之间的微小差异暗示问题是其他问题。

我正在 go playground 中运行代码。

我的代码:

package main

import (
    "fmt"
    "time"
    )

func main() {
    Remind("It's time to eat")
}


func Remind(text string) {
    t := time.Now()
    fmt.Println(t)
    fmt.Printf("The time is %d.%d: ", t.Hour, t.Minute)
    fmt.Printf(text)
    fmt.Println()
}

【问题讨论】:

  • HourMinute 是函数;你需要评估它们:fmt.Printf("The time is %d.%d: ", t.Hour(), t.Minute()).
  • 天哪,这很简单明了。谢谢!那么你知道 t.Hour 实际返回的是什么吗?为什么它与 t.Minute 和 t.Second 如此相似?
  • t.Hour 和 t.Minutes 是对函数的引用,而不是函数的结果。您可以将它们视为存储这些函数的内存地址。

标签: time go


【解决方案1】:

您需要调用t.Hour() 而不是将其用作值。

在此处查看time 包的来源:https://golang.org/src/time/time.go?s=12994:13018#L390

   399  // Hour returns the hour within the day specified by t, in the range [0, 23].
   400  func (t Time) Hour() int {
   401      return int(t.abs()%secondsPerDay) / secondsPerHour
   402  }
   403  

如有疑问,可以通过阅读官方go packages page的具体包源快速找到解释。

【讨论】:

  • 嗯,我已经阅读了时间包页面,但我没有意识到我没有以正确的方式调用小时作为函数。你知道t.Hour 会返回什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 2011-04-16
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
相关资源
最近更新 更多