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

Flutter中如何将Firebase时间戳转换为dd-mm-yyyy格式日期

问题根源

Firebase 返回的 timestamp 类型字段是 Firestore SDK 内置的 Timestamp 类实例,直接调用 toString() 得到的是 (seconds=xxx, nanoseconds=xxx) 格式的对象描述文本,既不是 Dart 原生 DateTime 类型,也不是可被 DateFormat 直接识别的标准时间字符串,所以直接解析会失败。

解决方法
  • 先确保项目引入了日期格式化所需的 intl 包,在 pubspec.yaml 中添加依赖(已引入可跳过):
dependencies:
  intl: ^0.18.1

在对应业务文件头部导入需要的包:

import 'package:intl/intl.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
  • 调用 Timestamp 实例自带的 toDate() 方法,将其转为 Dart 原生 DateTime 对象,再用 DateFormat 指定 dd-MM-yyyy 格式输出即可。
代码修改

替换你原来 DataTable 中 rows 属性对应的 map 逻辑:

rows: snapshot.data!.docs.map((data) {
  // Timestamp转原生DateTime
  final paidDate = (data['paidDate'] as Timestamp).toDate();
  // 按指定格式格式化
  final formattedDate = DateFormat('dd-MM-yyyy').format(paidDate);
  return DataRow(cells: [
    DataCell(Text(data['amount'].toString())),
    DataCell(Text(formattedDate))
  ]);
}).toList()
兼容空值场景

如果 paidDate 字段可能存空值,加层判断避免运行时报错:

rows: snapshot.data!.docs.map((data) {
  String displayDate = '-';
  final rawDate = data['paidDate'];
  if (rawDate is Timestamp) {
    displayDate = DateFormat('dd-MM-yyyy').format(rawDate.toDate());
  }
  return DataRow(cells: [
    DataCell(Text(data['amount'].toString())),
    DataCell(Text(displayDate))
  ]);
}).toList()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 21:54:28