Reputation: 38879
Suppose I have
t := time.Parse("15:04:05.000", "12:16:54.016")
This returns a time.Time which prints out as:
0000-01-01 12:16:54.016 +0000 UTC
But I know what the actual date is and have it stored as a variable called timestamp
which is a time.Time struct already. How do I combine them?
e.g. suppose the date is 2019-06-17. I need the output to be:
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
This should be trivial right? well it is in C which is what I'm most used to. But I haven't found the answer easily for golang. The docs don't tell me the actual underlying field names, just functions. :-/
Upvotes: 1
Views: 2683
Reputation: 22037
If you already have the Date
in string format, combine the entire date-time into a single string and call time.Parse
once:
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)
}
Output:
2019-06-17 12:16:54.016 +0000 UTC
https://play.golang.org/p/kbor6NBMFLl
If the date is not in a string format - but you have it in a time.Time
, simply coerce to the desired string format, like so:
mydate.Format("2006-01-02") // e.g. mydate:= time.Now()
Upvotes: 0
Reputation: 97839
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)
}
Upvotes: 3