在 Firebase 中保存和检索日期

新手上路,请多包涵

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

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 中是否有保存和检索日期的正确方法?

原文由 0xC0DED00D 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 658
2 个回答

您可以将日期存储为纪元日期。您可以使用系统时间 System.currentTimeMillis(); 或使用 Firebase 服务器时间及其 ServerValue.TIMESTAMP 。第一个选项的问题是它会随着时区和系统设置而变化。 So if you store the date as a long, you just have to change your OfferModel field mStartDate to a long and then use new Date(long) 获取对象时得到对应的 Date

原文由 Sunshinator 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 ISO 8601 日期格式

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

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

Date 表示为 String 有两个更大的优势:

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

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

原文由 JP Ventura 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题