提问人:Munsif Ali 提问时间:11/10/2023 更新时间:11/19/2023 访问量:56
在 Flutter 中仅按日期比较 DateTime 对象
Comparing DateTime Objects by Date Only in Flutter
问:
我正在处理一个 Flutter 项目,我需要比较两个 DateTime 对象,但只能按它们的日期进行比较。DateTime 对象的时间部分与我的比较无关。
下面是我正在处理的 DateTime 对象的示例:
飞镖
DateTime dt1 = DateTime.parse("2023-11-10 11:47:00");
DateTime dt2 = DateTime.parse("2023-11-10 10:09:00");
我想比较 dt1 和 dt2,以便只考虑日期(年、月、日),而不考虑时间。如何在 Flutter 中实现这一点?任何帮助将不胜感激。谢谢!
答:
0赞
Munsif Ali
11/10/2023
#1
在 Flutter 中,你可以通过从仅包含年、月和日信息的原始对象创建新对象来比较两个对象,仅相对于日期(而不是时间)。下面是一个示例:DateTime
DateTime
DateTime dt1 = DateTime.parse("2023-11-10 11:47:00");
DateTime dt2 = DateTime.parse("2023-11-10 10:09:00");
// Create new DateTime objects with only year, month, and day
DateTime date1 = DateTime(dt1.year, dt1.month, dt1.day);
DateTime date2 = DateTime(dt2.year, dt2.month, dt2.day);
// Now you can compare date1 and date2
if(date1.compareTo(date2) == 0){
print("Both dates are the same.");
}
if(date1.compareTo(date2) < 0){
print("date1 is before date2");
}
if(date1.compareTo(date2) > 0){
print("date1 is after date2");
}
在此代码中,和分别是从 和 创建的新对象,但它们仅包含年、月和日信息。默认情况下,时间设置为 00:00:00。因此,当您比较 和 时,您实际上只比较日期,而不是时间。date1
date2
DateTime
dt1
dt2
date1
date2
评论
1赞
Zhentao
11/10/2023
您可以直接比较 dt1 和 dt2 的年、月、日,为什么要创建新的 DateTime 对象?
0赞
jamesdlin
11/10/2023
@Zhentao 如果你正在测试相等性,那么如果没有新对象,比较是微不足道的。然而,三向比较棘手,而且很容易做错。创建新对象更简单,更不容易出错。DateTime
DateTime
2赞
Aymen Denoub
11/19/2023
#2
1) 仅使用年、月和日属性创建新的 Date 对象
final date1 = DateTime.parse('2021-09-01 03:30:00');
final date2 = DateTime.parse('2021-09-01 04:30:00');
int compareOnlyByDate(DateTime other) {
return DateTime(date1.year, date1.month, date1.day).compareTo(
DateTime(other.year, other.month, other.day),
);
}
// usage
final result = date1.compareOnlyByDate(date2);
if (result == 0) {
print('dates are equal');
}
if (result < 0) {
print('date1 is before date2');
}
if (result > 0) {
print('date1 is after date2');
}
或者作为扩展方法:
extension CompareDates on DateTime {
int compareOnlyByDate(DateTime other) {
return DateTime(year, month, day).compareTo(
DateTime(other.year, other.month, other.day),
);
}
}
2) 如果您不想创建新对象
您可以比较对象的 、 和 属性:year
month
day
DateTime
int compareOnlyByDate(DateTime date1, DateTime date2) {
if (date1.year == date2.year) {
if (date1.month == date2.month) {
return date1.day - date2.day;
} else {
return date1.month - date2.month;
}
} else {
return date1.year - date2.year;
}
}
这是另一种方法:
bool isSameDay(DateTime date1, DateTime date2) {
return date1.year == date2.year &&
date1.month == date2.month &&
date1.day == date2.day;
}
bool isGreater(DateTime date1, DateTime date2) {
return date1.isAfter(date2) && !isSameDay(date1, date2);
}
bool isLess(DateTime date1, DateTime date2) {
return date1.isBefore(date2) && !isSameDay(date1, date2);
}
评论
0赞
Munsif Ali
11/19/2023
很好的解释。
评论