我有两个DateTimes指示事件的开始和结束。我正在尝试将这两个日期之间的时间划分为几天:
DateTime start = DateTime.parse(event.startDate);
DateTime end = DateTime.parse(event.stopDate);
我尝试过进行while循环,然后调用currentDate.add(Duration(days: 1))
直到currentDate.isBefore(end)
遇到的困难是,开始日期可以是例如16:00,那么第一天应该是从今天的16:00
到00:00
。最后一天也是一样,它可以随时结束:
示例:
12:00 01.06.2019 - 9:00 03.06.2019
结果:
[(12:00 01.06.2019, 00:00 02.06.2019), (00:00 02.06.2019, 00:00 03.06.2019), (00:00 03.06.2019, 09:00 03.06.2019)]
答案 0 :(得分:1)
我不会使用add
,因为当夏令时开始或结束时,它可能会产生误导性的结果。与day + 1
一起使用构造函数更安全。
尝试一下:
main() {
final start = DateTime(2019, 6, 1, 12);
final end = DateTime(2019, 6, 3, 9);
var midnight = DateTime(start.year, start.month, start.day);
var nextMidnight = DateTime(midnight.year, midnight.month, midnight.day + 1);
var endMidnight = DateTime(end.year, end.month, end.day);
print('$start---$nextMidnight');
do {
midnight = nextMidnight;
nextMidnight = DateTime(midnight.year, midnight.month, midnight.day + 1);
print('$midnight---$nextMidnight');
} while (nextMidnight.isBefore(endMidnight));
print('$endMidnight---$end');
}