2016-09-19 102 views
1

根據我的Android應用程序中的日期對一些數據進行排序。它存儲如下:在Firebase數據庫中保存日期

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

年,月和日只是包含整數。這不能保存到Firebase數據庫,因爲它是具有非字符串鍵的映射。我雖然把它弄平了,把它變成了Map。數據結構的巨大折衷,因爲它允許前一個沒有(也不應該)允許的數據。但是,Date不是一個String。我想是這樣的:

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

,然後使用一個數據結構:

Map<String, Stuff> 

也不管用,它似乎使用該字符串不能在火力地堡數據庫有索姆非法字符。那麼,我將如何去做這項工作?希望能得到幫助。

回答

5

我會建議你創建一個結構是這樣的:

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

這樣你可以很容易地指數時間戳INT安全規則,做一個由Child查詢並使用start使用過濾器和endAt方法,您可以在其中定義定義範圍的時間戳

+0

這感覺很好,但我怎麼用我的東西來構造它?我是否創建了例如MyClass {MySpace的日期; 東西的東西; } 這不是將日期映射到東西? –

+0

是的,這是一個很好的結構。 因此,如果您需要從Joda或Date創建Date對象,則可以使用getter方法返回格式「mm-dd-yyyy」中的日期並傳入構造函數。既然你已經有了時間戳,你也可以用它來建造 – realdm

0

如果您使用的日期,你可以用

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

轉換爲字符串dateObject是您正在使用的是對的日期格式的日期和

"dd/MM/yyyy" 

。您可以在查找格式關於此信息的oracle Customizing Formats tutorial page

+0

解決問題「如何將日期轉換爲字符串?」。這不能解決我的問題,就像把一個Long變成一個String一樣(儘管這更糟,因爲它要求與數據庫一起工作的其他方知道dateformat。)測試代碼時出現以下錯誤:「FATAL EXCEPTION由com.google.firebase.database.DatabaseException導致:無效密鑰:19/09/2016。密鑰不得包含'/','。','#','$','['或'] '「 –

+0

而不是」dd/MM/yyyy「,您可以嘗試」dd-MM-yyyy「,因爲Firebase密鑰與' - '不存在任何問題 –

+0

至於其他方必須注意的問題,無論您如何保存它們,他們將不得不弄清楚使用什麼格式。每個應用程序都以不同的方式處理這些事情。 –