Dart intl包DateFormat小时解析异常:12:27被转换为00:27的问题求助
解决Dart intl包DateFormat解析12点时间显示为00:00的问题
这个问题我之前也碰到过!核心原因是你混淆了DateFormat里12小时制和24小时制的小时格式符,具体来说:
你用的hh是12小时制的格式标记(范围是01-12),当解析不带AM/PM标识的12:27:45时,DateFormat会默认把这个12判定为午夜12点(AM),对应24小时制的0点,所以才会出现00:27的结果,且DateTime的hour属性为0。
两种解决方案
方案1:改用24小时制格式符(推荐)
如果你需要直接显示中午12点为12:27,只需要把格式字符串里的hh改成HH(24小时制格式符,范围00-23):
formatDateTime(DateFormat("yyyy-MM-dd HH:mm").parse(fortune.readFinishedAt ?? "2025-12-27 12:27:45"))
这样解析后,DateTime的hour属性会是12,最终格式化结果就是你期望的12:27。
方案2:保留12小时制并明确AM/PM标识
如果你确实需要使用12小时制显示(比如要区分上午/下午),需要确保解析时的格式和输入字符串匹配:
- 如果能修改输入的时间字符串,加上AM/PM标记,比如改成
"2025-12-27 12:27:45 PM" - 对应的解析格式要加上
a(表示AM/PM标识):
formatDateTime(DateFormat("yyyy-MM-dd hh:mm:ss a").parse(fortune.readFinishedAt ?? "2025-12-27 12:27:45 PM"))
这样DateFormat就能正确识别这是下午12点,格式化后会显示12:27(如果需要显示PM的话,可以在格式字符串里加上a,比如"yyyy-MM-dd hh:mm a")。
内容的提问来源于stack exchange,提问作者denizz
相关产品推荐
相关产品推荐

