【问题标题】:How to compare two dates that are constructed differently in Dart?如何比较 Dart 中构造不同的两个日期?
【发布时间】:2020-02-03 04:27:06
【问题描述】:

我正在尝试比较两个日期,一个是用 DateTime.parse() 构建的,另一个是用 DateTime() 构建的,但是太胖了,我没有成功。

这是我的代码 sn-p。

void main(){
  String dateTime = '2020-02-03T08:30:00.000Z';
  int year = 2020;
  int month = 2;
  int day = 3;
  int hour = 8;
  int minute = 30;
  print(DateTime.parse(dateTime).isAtSameMomentAs(DateTime(year, month, day, hour, minute)));
}

虽然日期应该相同,但比较方法返回 false。

解决这个问题的正确方法是什么?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您可以通过将另一个日期转换为utc,然后将它们与isAtSameMomentAs 方法进行比较来做到这一点。下面的工作代码:

    void main(){
      String dateTime = '2020-02-03T08:30:00.000Z';
      int year = 2020;
      int month = 2;
      int day = 3;
      int hour = 8;
      int minute = 30;
    
      var dt = DateTime.utc(year,month,day,hour,minute);
      print(dt);
    
      print(DateTime.parse(dateTime).isAtSameMomentAs(dt));
    
      // 2020-02-03 08:30:00.000Z
      // 2020-02-03 08:30:00.000Z
      // true
    
    }
    

    希望这能回答你的问题。

    【讨论】:

      【解决方案2】:
      void main(){
         String dateTime = '2020-02-03T08:30:00.000Z';
         int year = 2020;
         int month = 2;
         int day = 3;
         int hour = 8;
         int minute = 30;
         print(DateTime.parse(dateTime).isAtSameMomentAs(DateTime.utc(year, month, day, 
         hour, minute)));
      }
      

      需要对当前日期时间使用DateTime.utc方法才能得到准确的答案。

      【讨论】:

        【解决方案3】:

        您只需从字符串中删除“Z”,因为当您打印日期时,您可以看到两个日期之间的差异仅为“Z”。

        如果您从其他地方获取字符串,则可以使用字符串方法删除最后一个“Z”,然后进行比较。

        当你这样做时它工作正常。

        【讨论】:

        • 您说得对,先生。谢谢你。根据 Dart 文档, isSameomentAs 函数与时区无关。我假设时间偏移不会影响它。
        • isAtSameMomentAs 函数与时区无关,因为它只比较自纪元以来的微秒数。如果两个日期在同一时刻,即使它们位于不同的时区并因此将打印为不同的挂历/时钟时间,它们也是相等的。
        猜你喜欢
        • 2017-10-23
        • 1970-01-01
        • 2019-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-03
        • 1970-01-01
        • 2021-12-18
        相关资源
        最近更新 更多