Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在Firebase数据库中保存日期_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 在Firebase数据库中保存日期

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

根据我的Android应用程序中的日期对一些数据进行排序。其存储方式如下:

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”格式返回日期并传递到构造函数中。因为您已经有了时间戳,所以也可以将其用于构造