我怎样才能在列表中找到只与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');
}
});