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

如何在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包简化解析逻辑:

  1. 先在pubspec.yaml中添加intl依赖
  2. 按如下逻辑实现排序:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 01:12:00