dreamevil0002
2019-07-16 22:34
浏览 139
已采纳

在golang中结合时间和日期?

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. :-/

图片转代码服务由CSDN问答提供 功能建议

假设我有

  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

  //  t compile 
ts.AddDate(timestamp.Year(),timestamp.Month(),timestamp.Day())
 
 
不能将timestamp.Month()(类型time.Month)用作ts参数中的int类型 .AddDate 
   
 
 

这应该很简单吧? 好吧,这是我最常使用的C语言。 但是我还没有轻易找到golang的答案。 文档不会告诉我实际的基础字段名称,而只是告诉函数。 :-/

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dtz33344 2019-07-17 01:56
    已采纳

    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() 
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • dpdbu24262 2019-07-16 23:00
    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)
    }
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题