2016-09-19 7 views
1

Androidアプリケーションの日付に基づいてデータをソートします。次のように格納されます。Firebaseデータベースに日付を保存する

Map<Year, Map<Month, Map<Day, Stuff>>> 

年、月、および日は単純に整数を含みます。これは、文字列以外のキーを持つマップであるため、Firebaseデータベースに保存することはできません。私はこれを平らにしてMapに変えようとしました。前のデータが許可していないデータを許可するので、データ構造上の大きな妥協点。ただし、Dateは文字列でも文字列でもありません。

String key = String.valueOf(date.getTime()); 

し、データ構造を使用して::

Map<String, Stuff> 

はどちらか動作しません、文字列がFirebaseデータベース内に持つことができませんSOM不正な文字を使用しているようだ、私はこのような何かを試してみました。だから、私はこの仕事をするにはどうしたらいいですか?助けていただければ幸いです。あなたは日付を使用する場合は、Dateオブジェクトは、あなたが作業していると

"dd/MM/yyyy" 

は、日付のフォーマットされた日付であることで

String date = new SimpleDateFormat("dd/MM/yyyy").format(dateObject); 

で文字列に変換することができ

答えて

5

にこの情報をフォーマットする見つけることができます:

... 
date:{ 
    day:1, 
    month:04, 
    year:2016, 
    timestamp:12345679979 //in milliseconds 
} 

あなたはセキュリティルールのint簡単にインデックスのタイムスタンプをすることができますこの方法を、行います子によってクエリを実行し、範囲を定義するタイムスタンプを定義するstart AtおよびendAtメソッドを使用してフィルタを使用します。

+0

これは正しいと感じますが、私はどのように私のものでそれを構成しますか?たとえば、MyClass { MyDate date; スタッフのもの。 } これは、日付をものにマッピングするのではなく、 –

+0

はい、それは構造化するための素晴らしい方法です。 したがって、JodaまたはDateからDateオブジェクトを作成する必要がある場合は、日付を "mm-dd-yyyy"という形式で返し、コンストラクタに渡すgetterメソッドを使用できます。すでにタイムスタンプを持っているので、それを使って建設に使うこともできます – realdm

0

。あなたは、私は次のようになり構造を作成するようアドバイスしていますoracle Customizing Formats tutorial page

+0

「日付を文字列に変換するにはどうすればよいですか?これは私の問題を解決しません、ちょうど文字列にLongを回すように振る舞います(データベースで作業している他のパーティーがdateformatを認識する必要があるので悪化します)。コードをテストするときのエラーは次のとおりです。 "FATAL例外:com.google.firebase.database.DatabaseException:無効なキー:19/09/2016。キーに '/'、 '。'、 '#'、 '$'、 '['、 ']を含めることはできません。 '" –

+0

" dd/MM/yyyy "ではなくfirebaseのキーに' - 'の問題がないので" dd-MM-yyyy "を試すことができます –

+0

他の当事者は気づいていなくても、とにかくどのフォーマットが使用されているか把握しなければならないでしょう。すべてのアプリケーションは、これらの処理を異なる方法で処理します。 –

関連する問題