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

