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

Flutter/Dart中如何将含多个日期的字符串转换为DateTime类型?

解决Flutter中多日期字符串转DateTime列表的问题

你直接将包含多个日期的整段字符串传给DateTime.parse()时,该方法仅能解析并返回最后一个有效日期——因为它只支持处理单个日期格式的字符串。要批量转换所有日期,按以下步骤操作:

处理步骤

  • 分割字符串为单行列表:将原始字符串按换行符分割,得到每行日志的单独条目。
  • 提取纯日期内容:去掉每行开头的日志前缀I/flutter (27269): ,保留核心的日期时间字符串。
  • 批量转换并收集结果:遍历每个纯日期字符串,转换为DateTime对象后存入列表,同时处理可能的格式异常。

完整代码示例

void main() {
  // 原始多日期日志字符串
  String dateLog = '''I/flutter (27269): 2022-08-01 13:08
I/flutter (27269): 2022-08-01 12:54
I/flutter (27269): 2022-08-01 11:46
I/flutter (27269): 2022-07-13 12:42''';

  // 按换行分割成单行列表
  List<String> lines = dateLog.split('\n');
  List<DateTime> dateList = [];

  for (String line in lines) {
    // 跳过空行
    if (line.trim().isEmpty) continue;
    
    // 用正则匹配并移除日志前缀,提取纯日期字符串
    String dateStr = line.replaceFirst(RegExp(r'^I/flutter \(\d+\): '), '').trim();
    
    // 安全转换,避免格式错误导致崩溃
    DateTime? parsedDate = DateTime.tryParse(dateStr);
    if (parsedDate != null) {
      dateList.add(parsedDate);
    }
  }

  // 输出转换后的DateTime列表
  print(dateList);
}

关键说明

  • 使用DateTime.tryParse()替代DateTime.parse():前者在遇到格式错误的字符串时返回null,不会直接抛出异常,提升代码健壮性。
  • 正则表达式^I/flutter \(\d+\): :可以匹配任意数字的日志进程号,适配不同的日志前缀格式,通用性更强。

内容的提问来源于stack exchange,提问作者Bill Tertis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:36:19