У меня есть приложение, в котором пользователи отслеживают свои серии. Полосы сегодня ломаются из-за подхода к летнему времени. Даты хранятся в базе данных Firebase в виде строки в формате «MM / dd / yyyy». Так что для пользователя, который использовал приложение в воскресенье, 3 ноября 2019 года, строковое значение «11/03/2019», которое преобразуется в значение даты, которое печатает
2019-11-03 00:00:00.000
Вот как я отрубаючасов / минут от текущей даты, чтобы я мог сравнить ее с другими датами:
final dateFormat = intl.DateFormat('MM/dd/yyyy');
final todayString = dateFormat.format(DateTime.now());
final today = dateFormat.parse(todayString);
print('Today is ' + today.toString());
Когда я печатаю значение сегодня, я получаю:
2019-11-04 00:00:00.000
Когда я пытаюсь получитьзначение DateTime вчера, например, так:
today.subtract(Duration(days: 1))
Значение распечатывается следующим образом:
2019-11-03 01:00:00.000
Обратите внимание, что значение часа теперь содержит единицу.
Чтобы определить, следует ли прервать или продолжить полосы. Я сравниваю дату последнего использования пользователя со вчерашним днем с помощью функции DateTime.compareTo ().
final activeStreak = this.lastTraining.compareTo(today.subtract(Duration(days: 1)));
Для пользователя, который использовал приложение в воскресенье, 3 ноября 2019 года, значение должно вернутьсякак 0, потому что вчера должно равняться вчера. Но из-за перехода на летнее время вчерашний день обрабатывается так же, как и вчера, поэтому он возвращает значение -1.
Как я могу предотвратить эту ошибку в последующие годы?