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

Flutter中DateTime字符串格式转换报错及显示需求求助

解决Flutter日期格式转换错误的方案

错误原因

你直接用目标显示格式的DateFormat去解析原始日期字符串,导致格式不匹配触发报错。原始日期格式是2023-01-01 11:59:59:0000,对应的解析格式应该是yyyy-MM-dd HH:mm:ss:SSSS,而非你使用的MMMM d, y。

正确转换步骤

  1. 解析原始日期字符串:用与原始格式匹配的DateFormat将字符串转为DateTime对象。
  2. 格式化为目标样式:用目标显示格式的DateFormat将DateTime对象转为易读字符串。
  3. 处理空值边界:避免控制器文本为空时触发解析错误。

修正后的代码示例

// 定义解析和格式化的DateFormat实例
final inputDateFormat = DateFormat('yyyy-MM-dd HH:mm:ss:SSSS', 'en_US');
final outputDateFormat = DateFormat('MMMM dd, yyyy h:mm\'a\'', 'en_US'); // 输出无空格的AM/PM格式

// 处理Date From显示
_couponDateFromCtrlr.text.isNotEmpty
    ? textContainer(
        "Date From: ",
        "${outputDateFormat.format(inputDateFormat.parse(_couponDateFromCtrlr.text))}",
      )
    : const Text("No Date From Selected"),

// 处理Date To显示
_couponDateToCtrlr.text.isNotEmpty
    ? textContainer(
        "Date To: ",
        "${outputDateFormat.format(inputDateFormat.parse(_couponDateToCtrlr.text))}",
      )
    : const Text("No Date To Selected"),

细节说明

  • 原始格式yyyy-MM-dd HH:mm:ss:SSSS:
    • yyyy对应四位年份,MM对应两位月份,dd对应两位日期;
    • HH对应24小时制小时,mm对应分钟,ss对应秒,SSSS对应四位毫秒。
  • 目标格式MMMM dd, yyyy h:mm'a':
    • MMMM对应月份全称(如April),dd对应两位日期,yyyy对应四位年份;
    • h对应12小时制小时,mm对应分钟,'a'直接输出AM/PM且不带空格(最终显示如3:58PM)。
  • 用isNotEmpty替代!= null:文本控制器的text属性永远不会为null,只会是空字符串,此判断更准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:52:58