ошибка разницы в дате и времени (между 28,3 и 27,3) - PullRequest
0 голосов
/ 28 марта 2020

Попробуйте это (в https://dartpad.dev/):

int day = 28;
DateTime day1 = DateTime(2020, 3, day);
DateTime day2 = DateTime(2020, 3, day - 1);
print(day1.difference(day2).inDays);

Результат должен быть 1, получая 0 вместо ... Замените переменную "день" на любое другое значение, и оно дает правильный результат (1) ...

Это ошибка?

1 Ответ

1 голос
/ 28 марта 2020

Ну, проблема сводится к возвращаемому значению 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...