【问题标题】:How to calculate end date如何计算结束日期
【发布时间】:2020-01-17 09:10:52
【问题描述】:

我正在尝试根据 startDate 和持续时间计算 endDate。

例子:

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.Time.AddDate 是您正在寻找的。经验法则:首先阅读所有文档。

标签: date go time


【解决方案1】:

最简单的方法是使用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)

查看相关问题:

time.Since() with months and years

Difference between two time.Time objects

【讨论】:

    【解决方案2】:

    最惯用的方式是:

    duration := time.Duration(/* some amount of time */)
    endDate := startDate.Add(duration)
    

    在此示例中,duration 可以是任意时间,最多为 approximately 290 years

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 2011-02-26
      • 1970-01-01
      相关资源
      最近更新 更多