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

Flutter中如何按分离的日期和时间字符串对列表排序?

按日期和时间排序Flutter列表

要实现同时按日期和时间排序,核心思路是先比较日期,日期相同时再比较时间。更可靠的方式是将日期和时间字符串合并为DateTime对象后再进行比较,避免字符串直接比较可能出现的格式问题(比如日期顺序、时间无前导零等情况)。

步骤1:编写日期时间解析函数

先实现一个辅助函数,把接口返回的日期(如"07/09/2022")和时间(如"18:30")字符串转换成DateTime对象:

DateTime _parseDateTime(String dateStr, String timeStr) {
  // 解析日期:按示例格式是 dd/MM/yyyy(日/月/年)
  final dateParts = dateStr.split('/');
  final day = int.parse(dateParts[0]);
  final month = int.parse(dateParts[1]);
  final year = int.parse(dateParts[2]);
  
  // 解析时间
  final timeParts = timeStr.split(':');
  final hour = int.parse(timeParts[0]);
  final minute = int.parse(timeParts[1]);
  
  return DateTime(year, month, day, hour, minute);
}

步骤2:修改排序逻辑

调用上述函数将每个列表项的日期时间转换为DateTime,再进行排序。如果要保持你原来的降序排序(最新的日期时间在前),代码如下:

data.sort((a, b) {
  final aDateTime = _parseDateTime(a.date, a.time);
  final bDateTime = _parseDateTime(b.date, b.time);
  return bDateTime.compareTo(aDateTime);
});

如果需要升序排序(最早的日期时间在前),只需把比较顺序反过来:

return aDateTime.compareTo(bDateTime);

注意事项

  • 如果你的日期格式是MM/dd/yyyy(月/日/年),需要调整解析函数中dateParts的顺序,把month换成dateParts[0],day换成dateParts[1]。
  • 直接用字符串比较日期时间虽然在部分场景可行,但遇到非标准格式时容易出错,转换成DateTime是最稳妥的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:05:25