如何添加迄今为止的天数

Ado*_*Ren 5 date go

我想得到给定日期的第二天@午夜。到目前为止我正在使用:

givenDate.Add(time.Hour * time.Duration(24))
Run Code Online (Sandbox Code Playgroud)

问题是某些时区如果我添加 24 小时,我就会在同一天停留。在法国,他们偶尔会改变工作时间。

使用以下内容添加一天是否安全?

time.Date(givenDate.Year(), givenDate.Month(), givenDate.Day()+1, 0, 0, 0, 0, loc)
Run Code Online (Sandbox Code Playgroud)

loc在给定的示例中是 time.UTC。

icz*_*cza 3

您提出的解决方案是“安全”且良好的:

t2 := time.Date(givenDate.Year(), givenDate.Month(), givenDate.Day()+1, 0, 0, 0, 0, loc)
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式加快速度:

y, m, d := givenDate.Date()
t2 := time.Date(y, m, d+1, 0, 0, 0, 0, loc)
Run Code Online (Sandbox Code Playgroud)

AsTime.Date()在一次调用中返回日期组件,如果您检查实现,Time.Year()Time.Month()方法都会在幕后Time.Day()调用相同的(未导出的)方法(在您的情况下为 3 次),就像.Time.date()Time.Date()

time.Date()文件表明:

日期返回对应的时间

yyyy-mm-dd hh:mm:ss + nsec nanoseconds
Run Code Online (Sandbox Code Playgroud)

在给定位置当时的适当区域。

因此文档指出,位置已被考虑在内,如果您将小时、分钟、秒、纳秒传递为 0,那么在给定的 zone 中这些将是 0 。