Dart-将时间范围划分为几天

时间:2019-06-03 15:26:16

标签: date datetime flutter dart

我有两个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:0000: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)]

1 个答案:

答案 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');
}