在Go中添加日期

时间:2015-10-07 16:54:37

标签: go

我正在尝试将一些天(实际上是几周)添加到Go中的现有日期。我试过了 myDate.Add(time.Hour * 24 * 7 * weeksToAdd)

但是当我尝试构建时遇到错误:invalid operation: time.Hour * startAdd (mismatched types time.Duration and float64)

所以weeksToAdd目前是float64,但我可以将其更改为int或其他。将其更改为int只会更改我的错误,表示intDuration不能相乘。

如何将日期添加到日期?

2 个答案:

答案 0 :(得分:34)

使用Time.AddDate()

myDate.AddDate(0, 0, 7 * weeksToAdd)

答案 1 :(得分:16)

您需要将weeksToAdd转换为time.Duration

myDate.Add(time.Hour * 24 * 7 * time.Duration(weeksToAdd))

在Go中,即使time.Duration在技术上是int64,也不能互换使用类型别名。

此外,即使数字常量24和7未明确输入,它们仍然可以原样使用,请参阅https://blog.golang.org/constants以获得深入的解释。

有关正在运行的示例,请参阅http://play.golang.org/p/86TFFlixWj

正如评论和另一个答案中所提到的,time.AddDate()的使用优于time.Add(),当工作时间超过24小时,因为time.Duration基本上代表纳秒。在工作数天,数周,数月和数年时,由于夏令时,闰年以及潜在的闰秒等因素,必须采取很多措施。

time.Duration类型的文档和代表单位的相关常量强调了这个问题(https://golang.org/pkg/time/#Duration):

  

没有Day或更大单位的定义,以避免夏令时时区转换混淆。