我正在尝试根据开始日期和持续时间计算结束日期。
例:
func calculateEndDate(startDate *time.Time, duration uint32, durationType uint32) *time.Time {
endDate := &time.Time{}
switch enum.DurationType(durationType) {
case enum.DayType:
temp := startDate.Add(time.Duration(24*duration) * time.Hour)
endDate = &temp
}
return endDate
}
这是惯用的方式吗?如果我想使用不同类型的时间,如years
或months
,我应该遵循这种模式吗?
最简单的方法是只使用time.Duration
和time.Add()
方法来计算结束日期:
t := time.Now()
d := 3*time.Hour + 20*time.Minute
end := t.Add(d)
如果日期可以大于一天,那么这已经不够了,因为应考虑夏令时和闰年。此外,time.Duration
不能表示持续时间大于 290 年(大约(。
在这种情况下,持续时间应作为(years, months, days)
三元给出,并且应使用time.AddDate()
。
t := time.Now()
years, months, days := 15, 2, 3
end := t.AddDate(years, months, days)
请参阅相关问题:
时间。自((与月和年
两个时间之间的差异。时间对象
最惯用的方式是:
duration := time.Duration(/* some amount of time */)
endDate := startDate.Add(duration)
在此示例中,duration
可以是任意时间量,最长可达大约 290 年:
duration := 10 * time.Second // 10 seconds
duration := 15 * time.Minute // 15 minutes
duration := 5 * time.Hour // 5 hours
duration := 6 * 24 * time.Hour // 6 24-hour days
等