You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何用Set方法从对象列表提取唯一日期(仅年月日)

解决方案:基于年月日获取唯一日期

要解决这个问题,核心是忽略DateTime的时分秒部分,只保留年月日信息,让同一天的日期被Set判定为相等元素从而去重。

方法一:生成仅含年月日的DateTime对象

通过创建新的DateTime实例,只传入原日期的年、月、日参数(时分秒默认设为0),这样相同年月日的对象会被Set视为相等:

final uniqueDates = datalist
    .map((e) => DateTime(e.date.year, e.date.month, e.date.day))
    .toSet();

方法二:直接生成格式化后的日期字符串(可选)

如果需要直接得到YYYY-MM-DD格式的字符串结果,可以在去重后进一步转换:

final uniqueDateStrings = datalist
    .map((e) => DateTime(e.date.year, e.date.month, e.date.day))
    .toSet()
    .map((date) => 
        "${date.year}-${date.month.toString().padLeft(2, '0')}-${date.day.toString().padLeft(2, '0')}"
    )
    .toList();

原理说明

Dart中DateTime的相等性比较会精确到毫秒,所以原代码中即使是同一天的不同时间,也会被Set当成不同元素。通过生成仅保留年月日的新DateTime对象,就能让同一天的日期拥有完全相同的时间戳(时分秒均为0),从而被Set正确去重。

内容的提问来源于stack exchange,提问作者Irfan Ganatra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 02:20:45