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

如何在Dart中正确解析2022-08-04T16:13:51+03:00格式的时间?

解决ISO 8601时间格式解析异常问题

你的时间格式2022-08-04T16:13:51+03:00是ISO 8601标准格式,DateTime.parse()本身支持解析这种格式,出现FormatException的根本原因是StreamBuilder在初始状态或数据流未返回有效数据时,snapshot.data为null,你用空字符串''作为兜底值,而空字符串无法被DateTime.parse()解析,导致抛出异常。

修复步骤:

  • 先判断快照状态与数据有效性:在解析时间前,先检查snapshot是否有数据、数据是否为空,避免传入无效值给DateTime.parse()。
  • 可选添加默认兜底时间:如果需要在无数据时显示默认时间,可指定一个合法的ISO格式时间作为兜底,而非空字符串。

修复后的代码示例:

child: StreamBuilder<String?>(
  stream: ProviderService.getTime(),
  builder: (context, snapshot) {
    // 处理无数据/加载状态,显示占位UI
    if (!snapshot.hasData || snapshot.data == null || snapshot.data!.isEmpty) {
      return Text('加载中...');
    }
    
    // 数据有效时再解析时间
    var time = DateTime.parse(snapshot.data!).toLocal();
    String date = DateFormat("HH:mm:ss").format(time);
    
    return Text(date); // 替换为你的实际UI组件
  },
)

额外说明:

如果数据流可能返回空字符串而非null,要确保判断逻辑包含snapshot.data!.isEmpty的检查;若希望无数据时显示默认时间(比如当前时间),可修改兜底逻辑:

String timeStr = snapshot.data ?? DateTime.now().toIso8601String();
var time = DateTime.parse(timeStr).toLocal();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:15:38