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
相关产品推荐
相关产品推荐

