【问题标题】:How to Sort Firebase data by date stored as Value如何按存储为值的日期对 Firebase 数据进行排序
【发布时间】:2018-06-26 10:00:04
【问题描述】:

我正在尝试使用日期对存储在 Firebase 数据库中的数据进行排序。目前的存储结构是:

 date: "3/1/2018"
 description: "Some Description"
 time: "6 : 24"
 title: "Some Title"

因此,通过使用 Recyclerview,我只能以按字母顺序排序的方式获取数据。如何使用 orderByValue 函数按日期对这些数据进行排序?

如果有三个事件,第一个是 02/05/18,第二个是 01/05/18,第三个是 05/05/18,我希望显示最新的数据,因为最新的数据是 01/05/18然后是 02/05/18,然后是 05/05/18。

我已经阅读了有关 Stack Overflow 的各种问题,但没有一个可以帮助我解决问题。

【问题讨论】:

  • 您的日期格式是字符串,最好将其存储为longint 类型的Unix 时间戳。这使得订购变得非常容易。
  • 我使用对话框从用户端获取日期,如何将其转换为 Unix?

标签: android firebase firebase-realtime-database


【解决方案1】:

你应该以毫秒为单位存储数据,不是那么难,然后你可以带数据并在 Date 中解析它,看看这个sn-p

   try{

         HttpClient httpclient = new DefaultHttpClient();
                        HttpResponse response = httpclient.execute(new HttpGet("https://google.com/"));
                        StatusLine statusLine = response.getStatusLine();
                        if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
                            DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss z", Locale.ENGLISH);
                            dateStr = response.getFirstHeader("Date").getValue();
                            Date startDate = df.parse(dateStr);
                            dateStr = String.valueOf(startDate.getTime() / 1000);

   } else {
                    //Closes the connection.
                    response.getEntity().getContent().close();
                    throw new IOException(statusLine.getReasonPhrase());
                }
            } catch (ClientProtocolException e) {
                Log.d("Response", e.getMessage());
            } catch (IOException e) {
                Log.d("Response", e.getMessage());
            } catch (ParseException e) {
                e.printStackTrace();
            }

在这里你可以在谷歌中获得以毫秒为单位的服务器时间

或者如果您想通过手机获取时间

Long tsLong = System.currentTimeMillis() / 1000;

您可以将这些毫秒转换为日期

 SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
            String myDate = formatter.format(new Date(Long.parseLong(HERE_YOUR_MILIS_DATE) * 1000L));

希望对你有帮助

【讨论】:

  • 谢谢,我将日期转换为毫秒并将其存储在 firebase 中。然后在检索数据时,我使用 orderByChild("date");一切都如我所愿
【解决方案2】:

您应该以不同的方式存储日期,因为这样做会非常困难(您必须在客户端中进行)。相反,您应该将日期存储为时间戳,如下所示:

{
    date: 1514978640000,
    description: "Some Description"
    title: "Some Title"
}

同时,您可以在一个字段中存储日期和时间,然后在任何地方使用它进行转换。那么排序就变得微不足道了。

【讨论】:

  • 所以现在我必须更改整个代码?有什么办法可以将字符串日期转换为时间戳?
  • 不是整个代码,只是上传日期的两行
  • 知道了,谢谢 :)
  • 如果您的数据库中已经有大量数据,则必须对其进行转换,但这是一次性的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 2019-01-17
  • 2020-06-04
  • 2020-12-13
  • 2016-10-15
  • 1970-01-01
  • 2020-03-17
相关资源
最近更新 更多