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

Flutter intl包DateFormat格式化分钟存在错误

Flutter intl包DateFormat分钟格式化错误解决方案

问题描述

在美中夏令时(US Central DST)环境下运行代码时,发现Flutter的intl包中DateFormat格式化分钟存在错误,格式化后的分钟数与预期偏差。

运行环境:

  • Flutter版本3.10.0稳定版
  • Dart版本3.0.0
  • intl: ^0.18.1(0.18.0版本也存在相同问题)

测试代码1:

final givenDate = DateTime.parse('1980-01-03T11:05:16Z');
const expectedDateString = '01/03/1980 11:05:16';

print("givenDate is ${givenDate.toString()}");
print(
    "DateFormat('MM/dd/yyyy HH:MM:ss').format(givenDate) is ${DateFormat('MM/dd/yyyy HH:MM:ss').format(givenDate)}");

打印结果:

givenDate is 1980-01-03 11:05:16.000Z
DateFormat('MM/dd/yyyy HH:MM:ss').format(givenDate) is 01/03/1980 11:01:16

实际结果分钟为01,与预期的05不符。

测试代码2:

final givenDate = DateTime.parse('1980-01-03T11:45:16.735Z');
const expectedDateString = '01/03/1980 11:45:16';

打印结果:

givenDate is 1980-01-03 11:45:16.735Z
DateFormat('MM/dd/yyyy HH:MM:ss').format(givenDate) is 01/03/1980 11:01:16

分钟部分仍显示01,正确应为45。

问题原因与解决方法

这是因为你在DateFormat的格式字符串中错误地使用了MM来表示分钟,MM是月份的格式符,而表示分钟的正确格式符是mm。

修正后的格式字符串应为'MM/dd/yyyy HH:mm:ss',修改后的测试代码如下:

final givenDate = DateTime.parse('1980-01-03T11:05:16Z');
const expectedDateString = '01/03/1980 11:05:16';

print("givenDate is ${givenDate.toString()}");
print(
    "DateFormat('MM/dd/yyyy HH:mm:ss').format(givenDate) is ${DateFormat('MM/dd/yyyy HH:mm:ss').format(givenDate)}");

修正后的打印结果:

givenDate is 1980-01-03 11:05:16.000Z
DateFormat('MM/dd/yyyy HH:mm:ss').format(givenDate) is 01/03/1980 11:05:16

此时分钟数与预期一致,问题解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:42:06