在 Firebase 中保存和检索日期

2022-09-01 18:47:49

我有一个具有以下结构的模型

public class OfferModel {
    private String mImageUrl;
    private String mOfferCode;
    private String mOfferTitle;
    private String mOfferDescription;
    private boolean mIsRunning;
    private String mCreatorUid;
    private Date mStartDate;
}

保存时其他一切都很好。它将Firebase实时数据库保存为

startDate
    date: 22
    day: 3
    hours: 23
    minutes: 20
    month: 5
    seconds: 50
    time: 1466617850476
    timezoneOffset: -330
    year: 116

但是当我尝试检索它时,日期给出了以下错误 -

java.lang.ClassCastException: java.util.HashMap cannot be cast to java.util.Date
at com.localvine.models.OfferModel.<init>(OfferModel.java:37)
at com.localvine.managers.OfferManager$1.onDataChange(OfferManager.java:62)
at com.google.android.gms.internal.zzafp.zza(Unknown Source)
at com.google.android.gms.internal.zzagp.zzSu(Unknown Source)
at com.google.android.gms.internal.zzags$1.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:615)

我知道Firebase不支持Java Date对象,但是由于它将它们保存在地图中,因此如何从该地图中取回日期?有没有合适的方法可以在Firebase Android中保存和检索日期?


答案 1

您可以将日期存储为纪元日期。您可以使用系统时间或将Firebase服务器时间与他们的.第一个选项的问题在于它随时区和系统设置而变化。因此,如果将日期存储为长,则只需将字段更改为 a,然后在检索对象时使用以获取相应的日期即可。System.currentTimeMillis();ServerValue.TIMESTAMPOfferModelmStartDatelongnew Date(long)Date


答案 2

使用 ISO 8601 日期格式

SimpleDateFormat ISO_8601_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:sss'Z'");

String now = ISO_8601_FORMAT.format(new Date());

表示为 有两个更大的优点:DateString

  • 它是人类可读的( vs"2018-03-30T13:18:39.516Z"1522415925281)
  • 在浏览器端,您可以简单地调用new Date("2018-03-30T13:18:39.516Z")

如果您的Android和浏览器都使用Firebase数据,这将非常有用。