Flutter中DateTime字符串格式转换报错及显示需求求助
解决Flutter日期格式转换错误的方案
错误原因
你直接用目标显示格式的DateFormat去解析原始日期字符串,导致格式不匹配触发报错。原始日期格式是2023-01-01 11:59:59:0000,对应的解析格式应该是yyyy-MM-dd HH:mm:ss:SSSS,而非你使用的MMMM d, y。
正确转换步骤
- 解析原始日期字符串:用与原始格式匹配的
DateFormat将字符串转为DateTime对象。 - 格式化为目标样式:用目标显示格式的
DateFormat将DateTime对象转为易读字符串。 - 处理空值边界:避免控制器文本为空时触发解析错误。
修正后的代码示例
// 定义解析和格式化的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
相关产品推荐
相关产品推荐

