在Go中添加日期

Ben*_*ker 25 go

我想在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不能成倍增加.

如何在日期中添加天数?

kos*_*tix 44

用途Time.AddDate():

myDate.AddDate(0, 0, 7 * weeksToAdd)
Run Code Online (Sandbox Code Playgroud)


Sir*_*ius 18

你需要转换weeksToAddtime.Duration:

myDate.Add(time.Hour * 24 * 7 * time.Duration(weeksToAdd))
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

没有Day或更大单位的定义,以避免在夏令时时区转换中出现混淆.

  • 你应该按照@kostix的建议使用`AddDate`.使用"添加"几天或几周将无法正常使用DST和闰秒.这就是为什么没有为一天或一周定义`time.Duration`的原因. (5认同)
  • Time.Add不会就地运行. (2认同)