如何计算结束日期



我正在尝试根据开始日期和持续时间计算结束日期。

例:

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
}

这是惯用的方式吗?如果我想使用不同类型的时间,如yearsmonths,我应该遵循这种模式吗?

最简单的方法是只使用time.Durationtime.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

相关内容

最新更新