私はfirebaseタイムスタンプから次のように日付と時刻を取得しようとしました:
Date date=new Date(timestamp*1000);
SimpleDateFormat sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
sfd.format(date);
しかし、私は次のような結果を得ています:
:02-02-48450 04:21:54
:06-02-48450 10:09:45
:07-02-48450 00:48:35
ご覧のとおり、年は私たちの生活ではありません。
だから、私がこれを修正するのを手伝ってください。
タイムスタンプ1466769937914
は2016-06-24 12:05:37 UTC
と同じです。問題は、実際の理由なしにタイムスタンプを1000倍することです。その結果、1466769937914000
が得られます。そして、それは48450-02-01 21:51:54 UTC
に等しいので、得られる結果は技術的に正しく、すべて正常に機能しています。間違った入力データをコードに入力するだけで、修正する必要があるのはこれだけです。解決策は単に乗算を削除することであり、あなたはすべてうまくいくはずです:
SimpleDateFormat sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
sfd.format(new Date(timestamp))
Firebaseドキュメント によると、JSONで使用できるタイプは次のとおりです。
String
Long
Double
Boolean
Map<String, Object>
List<Object>
別の Stack Overflow post を引用して、エポックの代わりに JSON日付文字列形式yyyy-MM-dd'T'HH:mm:ss.SSSZ
を使用することをお勧めしますタイムスタンプ。
1335205543511
と2012-04-23T18:25:43.511Z
を比較すると、次のことがわかります。
ISO 8601は10年以上にわたって国際的に確立されており、 W3C 、 RFC3339 、および [ 〜#〜] xkcd [〜#〜]
日付については、次のコードを使用できます。
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(time);
String date = DateFormat.format("dd-MM-yyyy", calendar).toString();
時間:
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(time);
String date = DateFormat.format("hh:mm", calendar).toString();
TimestampからDate
オブジェクトのみを取得する必要がある場合、Timestampインスタンスには、Date
インスタンスを返すtoDate()
メソッドが付属しています。
明確にするために:
Date javaDate = firebaseTimestampObject.toDate()