Ну, проблема сводится к возвращаемому значению difference
, которое равно:
Разница измеряется в секундах и долях секунд. Разница выше подсчитывает количество дробных секунд между полуночью в начале этих дат. Если вышеуказанные даты были по местному времени, а не по UT C, то разница между двумя ночами не может быть кратна 24 часам из-за разницы в летнем времени.
https://api.dart.dev/stable/2.7.2/dart-core/DateTime/difference.html
Таким образом, значение, которое мы получаем из difference
, представляет собой Duration
объекты, содержащие разницу между двумя DateTime
объектами в секундах. Затем вы можете попросить Duration
представить этот результат в днях.
Проблема заключается в том, что многие страны переводят свои часы из-за перехода на летнее время в марте. На самом деле, ваш пример не показывает никаких ошибок на моем компьютере, так как я нахожусь в Дании. Поэтому я изменил ваш код на:
void main() {
for (var day = 1; day <= 31; day++) {
DateTime day1 = DateTime(2020, 3, day);
DateTime day2 = DateTime(2020, 3, day - 1);
print('Day $day: inDays: ${day1.difference(day2).inDays} inHours: ${day1.difference(day2).inHours}');
}
}
, который возвращает на моем компьютере следующее:
Day 27: inDays: 1 inHours: 24
Day 28: inDays: 1 inHours: 24
Day 29: inDays: 1 inHours: 24
Day 30: inDays: 0 inHours: 23
Day 31: inDays: 1 inHours: 24
Поскольку мы фактически убираем один час дня, когда мы переходим на летнее время , возвращаемая продолжительность не содержит 24 часа, но 23.