Flutter中如何将时间转为AM/PM格式?解决格式异常问题
解决Flutter中单独时间字符串转AM/PM格式的问题
你遇到的FormatException是因为DateTime.parse()无法直接解析只有时间部分的字符串(比如09:00:00)——这个方法要求输入符合ISO 8601标准的完整日期时间格式(例如2024-05-20T09:00:00),缺少日期部分就会报错。
下面给你两种可行的解决方案:
方案1:为时间字符串补充默认日期后解析
给你的时间字符串拼接一个固定的日期(比如2020-01-01,日期不影响最终的时间格式化结果),再用DateTime.parse()解析,最后转成AM/PM格式:
final item = snapshot.data[index]; String rawTime = item['time'].toString(); // 拼接默认日期,生成可被parse识别的完整格式 DateTime dateTime = DateTime.parse("2020-01-01 $rawTime"); String formattedTime = DateFormat.jm().format(dateTime); print(formattedTime); // 输出示例:9:00 AM、12:00 PM
方案2:直接用DateFormat解析时间字符串
利用DateFormat的解析能力,先指定时间格式(Hms对应24小时制的时:分:秒)解析原始时间字符串,再格式化为AM/PM格式:
final item = snapshot.data[index]; String rawTime = item['time'].toString(); // 用Hms格式解析纯时间字符串 DateTime dateTime = DateFormat.Hms().parse(rawTime); // 转成AM/PM格式 String formattedTime = DateFormat.jm().format(dateTime); print(formattedTime);
注意:两种方案都需要确保你已经导入了intl包(DateFormat来自这个包),如果还没添加,记得在pubspec.yaml中添加依赖:
dependencies: flutter: sdk: flutter intl: ^0.19.0 # 版本号可以替换为最新稳定版
内容的提问来源于stack exchange,提问作者AI.
相关产品推荐
相关产品推荐

