Saving and retrieving date in Firebase
我有一个具有以下结构的模型
1 2 3 4 5 6 7 8 9 |
其他一切在储蓄方面都很有效。它在FireBase实时数据库中保存为
1 2 3 4 5 6 7 8 9 10 | startDate date: 22 day: 3 hours: 23 minutes: 20 month: 5 seconds: 50 time: 1466617850476 timezoneOffset: -330 year: 116 |
号
但是当我试图检索它时,日期给出了以下错误-
1 2 3 4 5 6 7 | 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) |
我知道FielBASE不支持JavaDebug对象,但是既然它在地图中保存了,那么我怎么才能从那个地图中取回日期呢?在FireBase Android中是否有保存和检索日期的适当方法?
可以将日期存储为纪元日期。使用系统时间
使用ISO 8601日期格式:
1 2 3 | SimpleDateFormat ISO_8601_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:sss'Z'"); String now = ISO_8601_FORMAT.format(new Date()); |
。
将
- 它是人类可读的(
"2018-03-30T13:18:39.516Z" 对1522415925281 ) - 在浏览器端,您可以简单地调用
new Date("2018-03-30T13:18:39.516Z") 。
如果您的Android和浏览器都使用FireBase数据,那么这非常有用。
这就是我如何使用simpledateformat将日期转换为不带秒、小时或毫秒的日期,从而在FireBase上存储日期的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public void storeDatetoFirebase() { handler = new Handler(); runnable = new Runnable() { @Override public void run() { handler.postDelayed(this, 1000); try { Date date = new Date(); Date newDate = new Date(date.getTime() + (604800000L * 2) + (24 * 60 * 60)); SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd"); String stringdate = dt.format(newDate); System.out.println("Submission Date:" + stringdate); DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("My_Date"); databaseReference.child("init_date").setValue(stringdate); } catch (Exception e) { e.printStackTrace(); } } }; handler.postDelayed(runnable, 1 * 1000); } |
这就是它在FireBase上的表现:
。
希望有帮助……
尽管FireBase支持日期格式数据类型,但我还是希望以字符串格式保存日期时间,因为将其存储为字符串会变得非常容易检索。
要以字符串格式存储当前系统日期时间,只需在代码下面。
1 2 3 4 | DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date date = new Date(); String strDate = dateFormat.format(date).toString(); myRef.child("datetime").setValue(strDate); |
现在可以使用strdate将其存储在firebase中,也可以对该字符串执行任何操作。
可以在FireBase上设置日期对象
1 |
号
它起作用,但是
我注意到了日期的其他问题,当我从数据库手动更改月份时,当检索该日期时,值保持不变。