2016-09-19 98 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

至于其他方必须注意的问题,无论您如何保存它们,他们将不得不弄清楚使用什么格式。每个应用程序都以不同的方式处理这些事情。 –