我怎样才能在列表中找到只与Flutter/Dart中的DateTime对象匹配一半的元素?

我怎样才能在列表中找到只与Flutter/Dart中的DateTime对象匹配一半的元素?,flutter,datetime,dart,Flutter,Datetime,Dart,我有一个包含日期时间的列表,如下所示: [2021-03-05 00:00:00.000, 2021-03-12 08:00:00.000Z, 2021-03-19 08:00:00.000Z, 2021-03-26 08:00:00.000Z, 2021-04-02 08:00:00.000Z, 2021-04-09 08:00:00.000Z, 2021-04-16 08:00:00.000Z, 2021-04-23 08:00:00.000Z, 2021-04-30 08:00:00.00

我有一个包含日期时间的列表,如下所示:

[2021-03-05 00:00:00.000, 2021-03-12 08:00:00.000Z, 2021-03-19 08:00:00.000Z, 2021-03-26 08:00:00.000Z, 2021-04-02 08:00:00.000Z, 2021-04-09 08:00:00.000Z, 2021-04-16 08:00:00.000Z, 2021-04-23 08:00:00.000Z, 2021-04-30 08:00:00.000Z, 2021-05-07 08:00:00.000Z, 2021-05-14 08:00:00.000Z, 2021-05-21 08:00:00.000Z, 2021-05-28 08:00:00.000Z, 2021-06-04 08:00:00.000Z, 2021-06-11 08:00:00.000Z]
我需要完整的DateTime列表项,但是我希望能够查询“半匹配”,如下所示:

显然,目前没有


有没有一种简单的方法可以查询像上面这样的“半匹配”?

没有这样的内置方法。你应该创造你自己的

  • 定义一个方法,该方法在两个
    DateTime
    对象具有相同日期时返回:
  • bool areSameDay(日期时间一、日期时间二){
    返回1.day==2.day&&1.month==2.month&&1.year==2.year;
    }
    
  • 调用列表中的
    firstWhere
  • final targetDate=DateTime(2021,3,12);
    试一试{
    final dateTime=dates.firstWhere((date)=>areSameDay(date,targetDate));
    //发现
    }接住{
    //找不到
    }
    

    还要注意的是,
    contains()
    即使是完全匹配也不行。这是因为它比较了对
    DateTime
    对象的引用,而不是它们的内容。要比较
    DateTime
    对象内容,请使用
    DateTime.compareTo(DateTime-other)
    没有此类内置方法。你应该创造你自己的

  • 定义一个方法,该方法在两个
    DateTime
    对象具有相同日期时返回:
  • bool areSameDay(日期时间一、日期时间二){
    返回1.day==2.day&&1.month==2.month&&1.year==2.year;
    }
    
  • 调用列表中的
    firstWhere
  • final targetDate=DateTime(2021,3,12);
    试一试{
    final dateTime=dates.firstWhere((date)=>areSameDay(date,targetDate));
    //发现
    }接住{
    //找不到
    }
    

    还要注意的是,
    contains()
    即使是完全匹配也不行。这是因为它比较了对
    DateTime
    对象的引用,而不是它们的内容。要比较
    DateTime
    对象内容,请使用
    DateTime.compareTo(DateTime-other)
    您必须设置日期格式。 您可以在此处查找日期格式的选项-


    你必须格式化你的约会。 您可以在此处查找日期格式的选项-

    尝试使用包,它支持日期查询。见下文

    var jiffy = Jiffy(DateTime(2021, 3, 12));
    
    dates.forEach((date) {
        var isSame = jiffy.isSame(date);
        if (isSame) {
          print('Afermative');
        } else {
          print('Nope');
        }
      });
    
    尝试使用包,它支持日期查询。见下文

    var jiffy = Jiffy(DateTime(2021, 3, 12));
    
    dates.forEach((date) {
        var isSame = jiffy.isSame(date);
        if (isSame) {
          print('Afermative');
        } else {
          print('Nope');
        }
      });
    

    DateTime中没有此类方法。这意味着您应该编写自己的代码来比较
    .year
    month
    day
    ,然后将其传递给
    firstWhere()
    或类似文件。抱歉,请解释。我不明白你在说什么。我在回答中解释过。DateTime中没有这样的方法。这意味着您应该编写自己的代码来比较
    .year
    month
    day
    ,然后将其传递给
    firstWhere()
    或类似文件。抱歉,请解释。我不明白你在说什么。我在回答中解释了。啊,我明白了。这是有效的,谢谢你的输入!我想明天再尝试一种方法,我明白了。这是有效的,谢谢你的输入!明天我想再尝试一种看起来很简单的方法,明天我会尝试。谢谢。抱歉,没有意识到您的
    日期
    变量是
    日期时间
    的列表,我现在更新了我的答案看起来很简单,明天将试用。谢谢。很抱歉,没有意识到您的
    日期
    变量是
    日期时间
    的列表,我现在已经更新了我的回答Hey Jama我无法让它工作,抛出错误DateTime不是int的子类型(类似于此,丢失了错误并继续,抱歉)。抱歉,没有意识到您的
    日期
    变量是一个
    日期时间
    的列表,我现在更新了我的答案,以检查列表中的每个
    日期时间
    是否与目标匹配Y Jama我无法实现此功能,抛出错误DateTime不是int的子类型(类似于此,丢失了错误并继续,抱歉)。抱歉,没有意识到您的
    dates
    变量是一个
    DateTime
    列表,我现在更新了我的答案,以检查列表中的每个
    DateTime
    是否与目标匹配
    var jiffy = Jiffy(DateTime(2021, 3, 12));
    
    dates.forEach((date) {
        var isSame = jiffy.isSame(date);
        if (isSame) {
          print('Afermative');
        } else {
          print('Nope');
        }
      });