Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.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_Sorting_Firebase Realtime Database_Date Format - Fatal编程技术网

Android 根据Firebase中的日期对事件进行排序

Android 根据Firebase中的日期对事件进行排序,android,firebase,sorting,firebase-realtime-database,date-format,Android,Firebase,Sorting,Firebase Realtime Database,Date Format,我在Firebase中有以下格式的新闻数据: 我想根据日期(newsDate)按降序排序(最新的在顶部)。在从Firebase检索数据时,我已将此添加到代码中: databaseReference.orderByChild(“newdate”).addChildEventListener(新的ChildEventListener(){ //关于子添加方法 } 但这只进行字符串排序,因此顺序如下:2018年8月4日12:00、2018年8月13日10:30、2018年7月30日00:00 我知道

我在Firebase中有以下格式的新闻数据:

我想根据日期(
newsDate
)按降序排序(最新的在顶部)。在从Firebase检索数据时,我已将此添加到代码中:

databaseReference.orderByChild(“newdate”).addChildEventListener(新的ChildEventListener(){
//关于子添加方法
}

但这只进行字符串排序,因此顺序如下:2018年8月4日12:00、2018年8月13日10:30、2018年7月30日00:00

我知道这是因为字母排序。不知道如何用我的日期格式(dd/mm/yyyy hh:mm)和降序自定义排序顺序

想知道如何使用我的日期格式(dd/mm/yyyy hh:mm)自定义排序顺序吗

您可以通过将
newsDate
属性的类型从String更改为
timpestamp
来解决此问题。请查看我的回答,了解如何实现这一点

也按降序排列


要解决这个问题,请参阅Frank van Puffelen的答案。

尝试节省毫秒,然后像下面这样简单地使用查询,或者简单地查询日期

使用毫秒进行查询

使用日期查询

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm");
String currentDateandTime = sdf.format(new Date());

databaseReference.orderByChild("newsDate").startAt(currentDateandTime )

您需要使用时间戳,firebase无法对日期字符串进行排序。我需要在不更改firebase中的日期类型的情况下进行排序。因此,前面的部分应该做一些事情。例如,将所有数据收集到一个数组中,然后对其进行排序,然后发布?或者按正确的顺序发布,以便排序仍然正确?我遇到了相同的问题,并且解决了这个问题:嗨,哈桑!你尝试过我上面的解决方案了吗?很抱歉,但这对我没有帮助。因为我无法更改Firebase中newsDate的属性。我只需要对Firebase上存在的内容进行排序。现在正在考虑另一种方法。比如将所有数据收集到一个数组中,然后对其进行排序,然后发布?或者在上发布选择正确的顺序,这样的顺序仍然正确?不,不是!如果您的问题的答案是无法以您想要的方式解决,这并不意味着答案不正确。它没有按照您期望的方式帮助您,但这是Firebase的工作方式。解决此问题的简单而正确的方法是更改属性可以通过简单地将实际字符串转换为<代码>时间戳来完成。如果您决定排序字符串,请注意这些元素将按字典顺序排序,当然这不是您想要的。因此,如果您认为我的答案是正确的,根据FialBASE用例,也可以帮助未来的访问者,请考虑。点击投票箭头下方左侧的复选标记接受。应该将颜色更改为绿色。我将不胜感激。谢谢!
databaseReference.orderByChild("newsDate").startAt(new DateTime())
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm");
String currentDateandTime = sdf.format(new Date());

databaseReference.orderByChild("newsDate").startAt(currentDateandTime )