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

Flutter解析Firebase返回的日期字符串出现FormatException错误如何解决

报错原因

Dart 内置的DateTime.parse()方法仅支持标准 ISO 8601 格式的日期字符串,你使用的自定义格式yyyy-MM-dd – kk:mm(含中间的长破折号与空格)不在默认支持范围内,所以抛出格式异常。

解决方案

你需要借助intl包的DateFormat类实现自定义格式的日期字符串解析,步骤如下:

  1. 先在项目的pubspec.yaml文件中添加intl依赖:
dependencies:
  flutter:
    sdk: flutter
  intl: ^0.18.1 # 可替换为当前最新稳定版本

执行flutter pub get安装依赖。

  1. 在对应代码文件头部导入依赖:
import 'package:intl/intl.dart';
  1. 替换原来的日期解析逻辑,同时修正现有代码的隐藏问题:
    原有代码中retriveDateTime是数据库引用对象,本身不可能为null,你需要判断的是拉取到的数值是否为空;另外insertDataToDatabase()放在then外部会导致异步请求还没拿到日期就执行插入逻辑,需要调整位置。
    修正后的完整代码:
var retriveDateTime = database_Reference
      .child("users")
      .child(_wifiObject.macAddress)
      .child(DateFormat('dd-MM-yyyy').format(DateTime.now()));

retriveDateTime.once().then((value) {
  if (value.value != null && value.value['startingTime'] != null) {
    String formatedtime = value.value['startingTime'];
    // 用自定义格式解析日期
    startup_time = DateFormat('yyyy-MM-dd – kk:mm').parse(formatedtime);
  } else {
    startup_time = DateTime.now();
  }
  insertDataToDatabase();
});
  • 注意:若解析仍报错,请确认你的日期字符串中的分隔符(包括中间的破折号类型、前后空格)和DateFormat构造参数里的格式完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 02:39:00