在golang中结合时间和日期?

时间:2019-07-16 22:34:59

标签: go

假设我有

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

这将返回一个时间。时间显示为:

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的答案。文档不会告诉我实际的基础字段名称,而只是告诉函数。 :-/

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

如果您已经拥有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) }

time.Time

输出:

  

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

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


如果日期不是字符串格式-但日期是mydate.Format("2006-01-02") // e.g. mydate:= time.Now() ,只需将其强制转换为所需的字符串格式,如下所示:

/storage/emulated/0/Download