3 回答
TA贡献1793条经验 获得超6个赞
标准库中没有定义 time.Date 对象。只有 time.Time 对象。也没有办法对它们进行范围循环,但是手动循环它们非常简单:
// set the starting date (in any way you wish)
start, err := time.Parse("2006-1-2", "2016-4-1")
// handle error
// set d to starting date and keep adding 1 day to it as long as month doesn't change
for d := start; d.Month() == start.Month(); d = d.AddDate(0, 0, 1) {
// do stuff with d
}
TA贡献1805条经验 获得超10个赞
方式只有在迭代在一个月内时才有效。更好的迭代方法是使用时间的纪元格式。
例如,对于 oneDay,我们知道它是 86400 秒。我们可以做以下
oneDay := int64(86400) // a day in seconds.
startDate := int64(1519862400)
endDate := int64(1520640000)
for timestamp := startDate; timestamp <= endDate; timestamp += oneDay {
// do your work
}
简单且适用于迭代日。
对于月份,这种方式行不通,因为每个月都有不同的日子。我只有与@jussius 类似的想法,但会进行调整以适用于月份迭代。
TA贡献1789条经验 获得超10个赞
我很想比较日期
func LeqDates(a, b time.Time) bool {
year1, month1, day1 := a.Date()
year2, month2, day2 := b.Date()
if year1 < year2 {
return true
} else if year1 <= year2 && month1 < month2 {
return true
} else {
return year1 <= year2 && month1 <= month2 && day1 <= day2
}
}
- 3 回答
- 0 关注
- 170 浏览
添加回答
举报