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

为何Dart中DateTime.parse解析单数字日份时报错,双数字却正常?

问题原因与解决方案

嘿,这个问题我之前也踩过坑!原因其实很简单——Dart的DateTime.parse()方法对日期格式有着严格的要求,必须遵循ISO 8601标准,其中日期的「日」和「月」部分必须是两位数字(不足两位时需要补前导零)。

具体问题分析

你单独测试的print(DateTime.parse("2012-12-12"));能正常运行,是因为日期的日部分12是两位数字,符合格式要求。但在循环里,变量i的值是1、8、15、22这类数字,直接拼接后会生成2012-12-1、2012-12-8这样的字符串——这种单数字的日不符合DateTime.parse()的格式规则,所以就抛出了FormatException: Invalid date format错误。

解决办法

只需要把循环中的数字i转换成两位数字的字符串即可,Dart的String.padLeft()方法正好可以帮我们实现这个需求:

for (int i = 1; i <= 28; i = i + 7) {
  // 将数字转为两位字符串,不足两位时补前导零
  String formattedDay = i.toString().padLeft(2, '0');
  _activities[DateTime.parse('2012-12-$formattedDay')] = activityNames.toList();
}

这样处理后,i=1会变成'01',i=8会变成'08',拼接出来的日期字符串就是2012-12-01、2012-12-08这类符合标准的格式,DateTime.parse()就能正常解析了。

另外补充一点:如果你的月份是单数字(比如8月写成8而不是08),也会触发同样的错误,记得也要用同样的方式处理月份哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:08:30