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

如何格式化从Firebase Firestore获取的Timestamp日期?

Firestore Timestamp 格式化解决方案

步骤1:添加依赖

在项目的pubspec.yaml文件中,给dependencies添加intl包(用于便捷的日期格式化):

dependencies:
  flutter:
    sdk: flutter
  intl: ^0.18.1 # 可替换为最新稳定版本

执行flutter pub get完成依赖安装。

步骤2:导入格式化工具

在需要处理日期的文件顶部导入intl包:

import 'package:intl/intl.dart';

步骤3:修改数据获取代码

将Firestore返回的Timestamp转换为Dart原生DateTime对象,再按需求格式化为字符串:

StreamBuilder<DocumentSnapshot?>(
  stream: FirebaseFirestore.instance
      .collection("users")
      .doc(userUid)
      .snapshots(),
  builder: (context, snapshot) {
    if (snapshot.data == null) {
      return const Text('Oops sometings went wrong.\n *Please exist the app*');
    }

    // 取出Timestamp并处理空值
    Timestamp? accountCreated = (snapshot.data as DocumentSnapshot)['accountCreated'] as Timestamp?;
    String formattedDate = 'N/A';
    if (accountCreated != null) {
      DateTime dateTime = accountCreated.toDate();
      // 替换为你需要的格式,示例格式:"2024-05-20 14:30:00"
      // 若要类似"May 20, 2024 02:30 PM"的样式,改用DateFormat('MMM dd, yyyy hh:mm a')
      formattedDate = DateFormat('yyyy-MM-dd HH:mm:ss').format(dateTime);
    }

    return Center(
      child: Text(formattedDate),
    );
  },
)

自定义格式说明

DateFormat支持多种格式符号,常用规则如下:

  • yyyy: 四位年份(如2024)
  • MM: 两位月份(如05)
  • MMM: 月份缩写(如May)
  • dd: 两位日期(如20)
  • HH: 24小时制小时(如14)
  • hh: 12小时制小时(如02)
  • mm: 两位分钟(如30)
  • ss: 两位秒数(如00)
  • a: 上午/下午标识(AM/PM)

补充:无需第三方包的手动格式化

如果不想依赖intl,可以手动拼接日期字符串:

String formatTimestamp(Timestamp? timestamp) {
  if (timestamp == null) return 'N/A';
  DateTime dt = timestamp.toDate();
  return '${dt.year}-${dt.month.toString().padLeft(2, '0')}-${dt.day.toString().padLeft(2, '0')} ${dt.hour.toString().padLeft(2, '0')}:${dt.minute.toString().padLeft(2, '0')}';
}

内容的提问来源于stack exchange,提问作者It'sPhil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:24:27