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

Dart中如何移除字符串列表内匹配日期格式的字符串元素

Dart 移除列表中符合dd-MM-yyyy HH:mm格式日期字符串的实现方案

核心思路是通过严格的日期格式校验识别目标项,再做列表过滤,不推荐纯正则匹配(无法校验日期、时间值的合法性,容易出现误判)。

实现步骤

  • 引入官方维护的intl包用于日期格式解析,在项目pubspec.yaml中添加对应依赖即可,版本选择适配当前Dart/Flutter环境的稳定版。
  • 实例化和目标格式完全匹配的DateFormat对象,开启严格解析模式避免容错识别导致的误删。
  • 调用列表的where方法做过滤:所有能被严格解析为目标日期格式的元素直接排除,解析失败的非目标元素保留。

完整代码示例

import 'package:intl/intl.dart';

void main() {
  // 原始字符串列表示例
  List<String> rawList = [
    '产品说明书v1',
    '19-06-2022 12:37',
    '2022年6月19日通知',
    '31-12-2023 23:59',
    '01-01-2024 00:00',
    '测试报告-2024版',
    '32-13-2024 25:61' // 非法日期值,不属于有效目标项会被保留
  ];

  // 初始化严格匹配目标格式(日-月-年 时:分)的解析器
  final targetDateFormat = DateFormat('dd-MM-yyyy HH:mm');

  // 执行过滤
  List<String> resultList = rawList.where((element) {
    try {
      // 严格解析成功,说明是要移除的目标日期项,返回false排除
      targetDateFormat.parseStrict(element);
      return false;
    } catch (_) {
      // 解析失败,不属于目标格式项,返回true保留
      return true;
    }
  }).toList();

  // 输出过滤后的结果:[产品说明书v1, 2022年6月19日通知, 测试报告-2024版, 32-13-2024 25:61]
  print(resultList);
}

注意事项

必须使用parseStrict方法做解析,普通parse方法自带容错逻辑,会对格式有偏差、带多余字符的字符串做强制转换,容易误删非目标元素。
如果项目不允许引入额外依赖,也可以通过正则匹配格式+手动校验月/日/时/分的取值范围实现相同逻辑,但代码冗余度高,容易遗漏闰年2月天数、大小月天数这类边界场景,优先推荐使用intl包的解析方案。

内容的提问来源于stack exchange,提问作者Faris Shomali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:36:43