【问题标题】:Combining time & date in golang?在golang中结合时间和日期?
【发布时间】:2019-07-16 22:34:59
【问题描述】:

假设我有

t := time.Parse("15:04:05.000", "12:16:54.016")

这会返回一个 time.Time,它会打印为:

0000-01-01 12:16:54.016 +0000 UTC

但我知道实际日期是什么,并将其存储为一个名为 timestamp 的变量,这已经是一个 time.Time 结构。如何组合它们?

例如假设日期是 2019-06-17。我需要的输出是:

2019-06-17 12:16:54.016 +0000 UTC

// this doesn't compile
ts.AddDate(timestamp.Year(), timestamp.Month(), timestamp.Day())


cannot use timestamp.Month() (type time.Month) as type int in argument to ts.AddDate 

这应该是微不足道的吧?好吧,这是我最习惯的 C 语言。但是我还没有轻易找到 golang 的答案。文档没有告诉我实际的底层字段名称,只是函数。 :-/

【问题讨论】:

    标签: go


    【解决方案1】:
    package main
    
    import (
        "fmt"
        "log"
        "time"
    )
    
    func main() {
        d, err := time.Parse("2006-01-02", "2019-06-17")
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(d)
    
        t, err := time.Parse("15:04:05.000", "12:16:54.016")
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(t)
    
        f := d.Add(time.Hour*time.Duration(t.Hour()) + time.Minute*time.Duration(t.Minute()) + time.Second*time.Duration(t.Second()) + time.Nanosecond*time.Duration(t.Nanosecond()))
        fmt.Println(f)
    }
    

    【讨论】:

      【解决方案2】:

      如果您已经拥有字符串格式的Date,请将整个日期时间组合成一个字符串并调用一次time.Parse

      func datePlusTime(date, timeOfDay string) (time.Time, error) {
          return time.Parse("2006-01-02 15:04:05.000", date+" "+timeOfDay)
      }
      
      func main() {
          t, err := datePlusTime("2019-06-17", "12:16:54.016")
          if err != nil {
              panic(err)
          }
          fmt.Println(t)
      }
      

      输出:

      2019-06-17 12:16:54.016 +0000 UTC

      https://play.golang.org/p/kbor6NBMFLl


      如果日期不是字符串格式 - 但您使用的是 time.Time,只需强制转换为所需的字符串格式,如下所示:

      mydate.Format("2006-01-02") // e.g. mydate:= time.Now() 
      

      【讨论】:

      • 这本身并不简单,也不能解决 TZ 数学问题——它只是移动它。
      • @Flimzy 同意了。在 OP 中尚不清楚 TZ 信息在哪里:在日期 (time.Time) 中还是应该通过时间输入中继(如果我们不处理 UTC?)。 所以对于所有在家观看的孩子:始终将时间存储在 UTC!
      猜你喜欢
      • 2016-12-11
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多