【发布时间】:2020-03-01 00:48:33
【问题描述】:
我有一个应用程序,用户可以在其中跟踪他们的连续记录。由于夏时制的处理方式,今天的条纹正在打破。日期以“MM/dd/yyyy”格式的字符串存储在 Firebase 数据库中。因此,对于在 2019 年 11 月 3 日星期日使用该应用程序的用户,字符串值为“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)));
对于在 2019 年 11 月 3 日星期日使用该应用的用户,该值应返回为 0,因为昨天应该等于昨天。但是由于夏令时,现在昨天被视为昨天,所以它返回一个值 -1。
如何在接下来的几年中防止此错误?
【问题讨论】: