一尘不染

仅比较Dart中的DateTimes日期

flutter

我需要在我的应用中存储和比较日期(无时间),而无需关心时区。
我可以看到三种解决方案:

  1. (date1.year == date2.year && date1.month == date2.month && date1.day == date2.day)
    这就是我现在正在做的事情,但是太冗长了。

  2. date1.format("YYYYMMDD") == date2.format("YYYYMMDD")
    这仍然很冗长(尽管还不算太糟),但对我来说似乎效率不高…

  3. 自己创建一个新的Date类,也许将日期存储为“ YYYYMMDD”字符串,或者存储自1980年1月1日以来的天数。但这意味着重新实现一堆复杂的逻辑,例如不同的月份长度,加/减和leap年。

创建一个新类也避免了我担心的极端情况,Duration(days: 1)由于夏令时的更改,添加结果的日期相同。但是我可能没有想到这种方法的一些极端情况…

这些解决方案中哪一个最好,或者是我没有想到的更好的解决方案?


阅读 411

收藏
2020-08-13

共1个答案

一尘不染

自从我问这个问题以来,扩展方法已经在Dart中发布了。我现在将实现选项1作为扩展方法:

extension DateOnlyCompare on DateTime {
  bool isSameDate(DateTime other) {
    return this.year == other.year && this.month == other.month
           && this.day == other.day;
  }
}
2020-08-13