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

