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

Flutter+Firebase日历CRUD开发的日期格式转换类型错误问题

解决Flutter中Firebase时间戳转DateTime的类型错误

错误原因

你将DateTime对象转换为**微秒级时间戳(int类型)**存储到Firebase,但读取数据时直接将这个int值传入DateFormat.format()方法——该方法仅接受DateTime类型参数,因此抛出type 'int' is not a subtype of type 'DateTime'类型不匹配错误。

解决方案

读取数据时,将Firebase返回的int类型时间戳,通过DateTime.fromMicrosecondsSinceEpoch()方法还原为DateTime对象,再传入DateFormat.format()处理。

修改后的代码片段

替换你获取数据部分的subtitle代码:

return Card(
  margin: const EdgeInsets.all(10),
  child: ListTile(
    title: Text(documentSnapshot['name']),
    // 修正后的日期格式化代码
    subtitle: Text(DateFormat("EEEE, dd MMMM, yyyy")
        .format(DateTime.fromMicrosecondsSinceEpoch(documentSnapshot['date'] as int))),
    // ... 其他代码
  ),
);

可选优化(空安全与异常防护)

为避免空值或类型异常,可添加空判断与类型检查:

subtitle: Text(
  documentSnapshot['date'] is int
      ? DateFormat("EEEE, dd MMMM, yyyy").format(
          DateTime.fromMicrosecondsSinceEpoch(documentSnapshot['date'] as int))
      : "日期未设置",
),

关键注意点

  • 必须使用fromMicrosecondsSinceEpoch:因为你存储时调用的是DateTime.microsecondsSinceEpoch,如果误用fromMillisecondsSinceEpoch会导致日期计算偏差(相差1000倍)。
  • 若后续改为存储毫秒时间戳,需同步替换为DateTime.fromMillisecondsSinceEpoch()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:34:43