【发布时间】:2021-09-13 19:14:14
【问题描述】:
给定一个日期,假设是星期一,我希望如果加上 7 天,我会得到一个新的星期一。
有时就是这样,在某些情况下,它增加了一点,我得到了一个星期天。 我可以继续增加 7 天,然后得到星期天,直到我得到一个新的星期一。
我怎样才能制定一个精确的周期,让我在一周的同一天返回。
这里我将代码留在 Dart 中。链接到dartpad
void main() {
var date = DateTime(2020, 10, 20);
var weekday = date.weekday;
var endDate = DateTime(2021, 4, 8);
while (endDate.difference(date).inDays > 0) {
assert(date.weekday == weekday);
print('$date ${date.weekday} $weekday');
date = date.add(Duration(days: 7));
}
print('end');
}
结果是
2020-10-20 00:00:00.000 2 2
2020-10-26 23:00:00.000 1 2
2020-11-02 23:00:00.000 1 2
2020-11-09 23:00:00.000 1 2
2020-11-16 23:00:00.000 1 2
2020-11-23 23:00:00.000 1 2
2020-11-30 23:00:00.000 1 2
2020-12-07 23:00:00.000 1 2
2020-12-14 23:00:00.000 1 2
2020-12-21 23:00:00.000 1 2
2020-12-28 23:00:00.000 1 2
2021-01-04 23:00:00.000 1 2
2021-01-11 23:00:00.000 1 2
2021-01-18 23:00:00.000 1 2
2021-01-25 23:00:00.000 1 2
2021-02-01 23:00:00.000 1 2
2021-02-08 23:00:00.000 1 2
2021-02-15 23:00:00.000 1 2
2021-02-22 23:00:00.000 1 2
2021-03-01 23:00:00.000 1 2
2021-03-08 23:00:00.000 1 2
2021-03-15 23:00:00.000 1 2
2021-03-22 23:00:00.000 1 2
2021-03-30 00:00:00.000 2 2
2021-04-06 00:00:00.000 2 2
end
【问题讨论】:
-
它来自夏令时。请注意 10 月下旬和 3 月前后时间相差一小时。
-
正确。您没有添加七个日历日。您正在添加 7 个时钟日,也就是。 7 * 24 小时。当时区因夏令时而改变时,这意味着您将无法获得与以前相同的时钟时间。