【问题标题】:Sorting events according to date in Firebase根据 Firebase 中的日期对事件进行排序
【发布时间】:2019-03-17 09:57:53
【问题描述】:

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

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

databaseReference.orderByChild("newsDate").addChildEventListener(new ChildEventListener() { // on child added methods }

但这只是对字符串进行排序,所以顺序变成这样:04/08/2018 12:0013/08/2018 10:30,30/07/2018 00:00

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

【问题讨论】:

标签: android firebase sorting firebase-realtime-database date-format


【解决方案1】:

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

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

还有降序排列?

要解决此问题,请参阅此post 中的 Frank van Puffelen 的回答。

【讨论】:

  • 嗨哈桑!你有没有试过我上面的解决方案,它有效吗?
  • 抱歉,这对我没有帮助。因为我无法在 Firebase 中更改 newsDate 的属性。我只需要对 Firebase 上存在的内容进行排序。现在想另一种方法。就像将所有数据收集到一个数组中,然后对其进行排序,然后发布?还是按正确的顺序发布它,这样排序仍然正确?
  • 不,不是!如果您的问题的答案是无法以您希望的方式解决,这并不意味着答案不正确。它没有像您预期的那样帮助您,但这就是 Firebase 的工作方式。解决此问题的简单而正确的方法是更改​​属性的类型。可以通过简单地将实际字符串转换为timestamp 来完成。如果您决定订购字符串,请注意元素将按字典顺序排列,这肯定不是您想要的。
  • 因此,如果您认为我的回答根据 Firebase 用例是正确的,并且还可以帮助未来的访问者,请考虑通过单击左侧投票箭头下方的复选标记来接受它。应将颜色更改为绿色。我会很感激的。谢谢!
【解决方案2】:

尝试保存毫秒而不是日期,然后像下面这样简单地使用查询。或者简单地查询日期。

使用 Millis 查询

databaseReference.orderByChild("newsDate").startAt(new DateTime().getMillis())

使用日期查询

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 )

【讨论】:

    猜你喜欢
    • 2014-03-11
    • 2020-03-17
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多