如何在Dart/Flutter中实现日期比较与JSON日期排序
Dart/Flutter JSON日期排序问题解决方案
核心错误原因
- 取值逻辑错误:原有代码将
"date"字符串直接传入DateTime.parse作为日期内容解析,再用解析结果作为key从JSON中取值,完全颠倒了「先取字段值、再解析日期」的执行顺序 - 日期格式不兼容:你存储的日期格式为
dd/MM/yyyy,Dart内置DateTime.parse方法仅支持ISO 8601格式的日期字符串,直接解析会抛出格式异常
解决方案
方案1:无第三方依赖实现
无需引入额外包,手动拆分日期字符串完成解析:
// 自定义日期解析方法 DateTime parseCustomDate(String dateStr) { final parts = dateStr.split('/'); // 拆分后按 年-月-日 构造DateTime对象 return DateTime(int.parse(parts[2]), int.parse(parts[1]), int.parse(parts[0])); } // 排序逻辑 jsonData.sort((a, b) { final aDate = parseCustomDate(a['date'] as String); final bDate = parseCustomDate(b['date'] as String); return aDate.compareTo(bDate); // 升序排列,如需降序改为bDate.compareTo(aDate) });
方案2:使用intl包实现(适合复杂格式场景)
如果项目中存在多类自定义日期格式,可通过官方intl包简化解析逻辑:
- 先在
pubspec.yaml中添加intl依赖 - 按如下逻辑实现排序:
import 'package:intl/intl.dart'; // 排序逻辑 final dateFormatter = DateFormat('dd/MM/yyyy'); jsonData.sort((a, b) { final aDate = dateFormatter.parse(a['date'] as String); final bDate = dateFormatter.parse(b['date'] as String); return aDate.compareTo(bDate); });
注意:如果JSON的
date字段可能为空,建议在解析前增加判空逻辑,避免抛出空指针异常。
内容的提问来源于stack exchange,提问作者Carl Bruiners
相关产品推荐
相关产品推荐

