我正在尝试将一些天(实际上是几周)添加到Go中的现有日期。我试过了
myDate.Add(time.Hour * 24 * 7 * weeksToAdd)
但是当我尝试构建时遇到错误:invalid operation: time.Hour * startAdd (mismatched types time.Duration and float64)
所以weeksToAdd
目前是float64
,但我可以将其更改为int或其他。将其更改为int只会更改我的错误,表示int
和Duration
不能相乘。
如何将日期添加到日期?
答案 0 :(得分:34)
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或更大单位的定义,以避免夏令时时区转换混淆。