Android 在Firebase数据库中保存日期
根据我的Android应用程序中的日期对一些数据进行排序。其存储方式如下:Android 在Firebase数据库中保存日期,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,根据我的Android应用程序中的日期对一些数据进行排序。其存储方式如下: Map<Year, Map<Month, Map<Day, Stuff>>> 然后使用数据结构: Map<String, Stuff> Map 也不起作用,它似乎使用了字符串在Firebase数据库中不能具有的som非法字符。那么,我该怎么做才能让它成功呢?非常感谢您的帮助。如果您使用Date,可以使用 String date = new SimpleDateForm
Map<Year, Map<Month, Map<Day, Stuff>>>
然后使用数据结构:
Map<String, Stuff>
Map
也不起作用,它似乎使用了字符串在Firebase数据库中不能具有的som非法字符。那么,我该怎么做才能让它成功呢?非常感谢您的帮助。如果您使用Date,可以使用
String date = new SimpleDateFormat("dd/MM/yyyy").format(dateObject);
dateObject是您使用的日期,并且
"dd/MM/yyyy"
是日期的格式。您可以在中找到有关此的格式信息。我建议您创建一个如下所示的结构:
String key = String.valueOf(date.getTime());
...
date:{
day:1,
month:04,
year:2016,
timestamp:12345679979 //in milliseconds
}
通过这种方式,您可以轻松地为安全规则中的时间戳编制索引,按子级进行查询,并使用start-At和endAt方法使用过滤器,在这些方法中,您可以定义定义范围的时间戳回答了“如何将日期转换为字符串”的问题。这并不能解决我的问题,只是表现得像将一个长字符串转换成一个字符串(尽管这更糟糕,因为它需要处理数据库的其他方知道dateformat。)下面是测试代码时的错误:“由以下原因导致的致命异常:com.google.firebase.database.DatabaseException:无效密钥:2016年9月19日。键不能包含“/”、“.”、“#”、“$”、“[”、或“]”,而不能包含“dd/MM/yyyy”。您可以尝试使用“dd-MM-yyyy”“由于firebase密钥与“-”没有任何问题,因此其他方必须知道,无论您如何保存它,他们都必须弄清楚所使用的格式。每个应用程序都以不同的方式处理这些事情。这感觉是对的,但我如何用我的东西来构建它呢?例如,我是否创建MyClass{MyDate date;Stuff Stuff;}而不是将日期映射到Stuff?是的,这是一种很好的结构化方法。因此,如果需要从Joda或from Date构造Date对象,可以使用getter方法以“mm-dd-yyyy”格式返回日期并传递到构造函数中。因为您已经有了时间戳,所以也可以将其用于构造