如何在日期中添加天数

5
我想获得给定日期的下一天午夜时间。 目前我使用的是:
givenDate.Add(time.Hour * time.Duration(24))

问题出现在某些时区,如果加上24小时后仍然停留在同一天,而在法国,时间有时会改变。

使用以下代码增加一天是安全的吗?

time.Date(givenDate.Year(), givenDate.Month(), givenDate.Day()+1, 0, 0, 0, 0, loc)

在给定的示例中,loc 是以 time.UTC 为基准的。

您能具体说明“是否安全”吗?您对这种方法有什么疑虑?您测试过它吗? - Hymns For Disco
我认为你需要考虑的唯一边缘情况是有些时间实际上从未发生过,而有些时间发生了两次(夏令时调整1小时)。据我所知,所有进行调整的语言都是在凌晨2点进行的,因此如果你只关心午夜,那么这应该永远不会成为问题。 - super
在Go中如何给日期加上几天? - FObersteiner
请问loc的值是多少?源代码中是否存在一些指令缺失? - sensorario
@sensorario 这只是我的时区变量。我会更新示例以澄清。 - Ado Ren
显示剩余2条评论
1个回答

3

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

t2 := time.Date(givenDate.Year(), givenDate.Month(), givenDate.Day()+1, 0, 0, 0, 0, loc)

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

y, m, d := givenDate.Date()
t2 := time.Date(y, m, d+1, 0, 0, 0, 0, loc)

使用Time.Date()方法可以在一次调用中返回日期组件,如果您查看其实现代码,Time.Year()Time.Month()Time.Day()方法都会在底层调用相同的(未公开)Time.date()方法(在您的情况下调用3次),就像Time.Date()方法。

time.Date()文档说明:

Date returns the Time corresponding to

yyyy-mm-dd hh:mm:ss + nsec nanoseconds

in the appropriate zone for that time in the given location.

文档中指出位置会被考虑在内,如果你在小时、分钟、秒和纳秒上传递了0,则它们将在给定的时区中为0。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接