【问题标题】:How to convert Timestamp to DateTime from firebase with flutter如何使用颤振将时间戳从 Firebase 转换为 DateTime
【发布时间】:2020-09-19 08:45:36
【问题描述】:

我在 Firebase 中有时间戳项目。我从飞镖代码时间戳类型中获取项目。 它显示为“时间戳(秒=1590903768,纳秒=26999000)”。

我想仅在我的申请中显示日期,例如“2020-06-01”或“06-01”。

请给我建议。

【问题讨论】:

标签: firebase flutter dart


【解决方案1】:

您可以将Timestamp DataType 转换为DateTime,然后根据您的要求格式化 DateTime。

示例

在您的 dart 文件中添加以下方法。

String formatTimestamp(Timestamp timestamp) {
  var format = new DateFormat('y-MM-d'); // <- use skeleton here
  return format.format(timestamp.toDate());
}

然后从 FireStore 中获取 TimeStamp 并将其传递给此方法

print(formatTimestamp(doc.data['timestamp']));

输出

2021/01/11

其他可用格式,请使用 Skeleton 格式化。

 ICU Name                   Skeleton
 --------                   --------
 DAY                          d
 ABBR_WEEKDAY                 E
 WEEKDAY                      EEEE
 ABBR_STANDALONE_MONTH        LLL
 STANDALONE_MONTH             LLLL
 NUM_MONTH                    M
 NUM_MONTH_DAY                Md
 NUM_MONTH_WEEKDAY_DAY        MEd
 ABBR_MONTH                   MMM
 ABBR_MONTH_DAY               MMMd
 ABBR_MONTH_WEEKDAY_DAY       MMMEd
 MONTH                        MMMM
 MONTH_DAY                    MMMMd
 MONTH_WEEKDAY_DAY            MMMMEEEEd
 ABBR_QUARTER                 QQQ
 QUARTER                      QQQQ
 YEAR                         y
 YEAR_NUM_MONTH               yM
 YEAR_NUM_MONTH_DAY           yMd
 YEAR_NUM_MONTH_WEEKDAY_DAY   yMEd
 YEAR_ABBR_MONTH              yMMM
 YEAR_ABBR_MONTH_DAY          yMMMd
 YEAR_ABBR_MONTH_WEEKDAY_DAY  yMMMEd
 YEAR_MONTH                   yMMMM
 YEAR_MONTH_DAY               yMMMMd
 YEAR_MONTH_WEEKDAY_DAY       yMMMMEEEEd
 YEAR_ABBR_QUARTER            yQQQ
 YEAR_QUARTER                 yQQQQ
 HOUR24                       H
 HOUR24_MINUTE                Hm
 HOUR24_MINUTE_SECOND         Hms
 HOUR                         j
 HOUR_MINUTE                  jm
 HOUR_MINUTE_SECOND           jms
 MINUTE                       m
 MINUTE_SECOND                ms
 SECOND                       s

我希望这会有所帮助!

【讨论】:

  • 保存在 Firestore 上的实际时间戳是 13-Nov-21,但使用此代码后,显示的日期是 13-10-21(13-Oct-21)。如何解决这个问题..??
  • @Madhav 请从 Firebase 控制台检查您的 Firestore 数据库并验证一次日期,因为此代码将 TimeStamp 转换为 DateTime 并且只是格式化,它工作正常。如果您仍然对此代码有疑问,请创建新问题,提供有关您的代码的更多信息并在此处分享链接,以便我为您提供帮助!
  • 我得到了答案,DateFormat('d-MM-y') 将显示 11 月为 10,而 Jan 显示为 0,因为计数从 0 开始。所以,我改用 DateFormat('d-MMM-y'),它显示 13-Nov- 21,而不是 13-10-21。
  • @Madhav 谢谢Madhav,我也不知道这个日期计数系统。
【解决方案2】:

你从 firestore 取回了一张地图。假设您已将其命名为“creationDate”,您可以使用 toDate() 飞镖函数将返回的时间戳转换为 DateTime 对象。格式化日期时间的“最简单”方法是使用 intl

// Map From firestore
Map data = documentSnapshot.data();
var creationDate = data['creationDate'].toDate();

//Format using intl package
DateFormat _dateFormat = DateFormat('y-MM-d');
String formattedDate =  _dateFormat.format(dateTime);

【讨论】:

    【解决方案3】:

    Timestamp 类有一个 toDate 函数,可将其转换为 DateTime 对象。请参阅this 了解更多信息。现在,使用 intl 包格式化程序可以更轻松地完成将其转换为字符串时想要进行的任何格式化。

    例子:

    Timestamp stamp = Timestamp.now();
    DateTime date = stamp.toDate();
    

    【讨论】:

      猜你喜欢
      • 2019-08-15
      • 2018-10-16
      • 2020-07-09
      • 2022-06-11
      • 2019-12-24
      • 2011-12-18
      • 2019-11-30
      • 2023-03-04
      • 1970-01-01
      相关资源
      最近更新 更多