【问题标题】:How to sort date Firestore in Kotlin?如何在 Kotlin 中对日期 Firestore 进行排序?
【发布时间】:2021-12-21 05:30:12
【问题描述】:

我想列出最新的订单直到最旧的订单。我已经在用户付款之前设置了日期格式。

// Get current date & time
val currentDateTime = LocalDateTime.now()
// Format date time style
currentDateTime.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM))
// Finalize convert format
val date = DateTimeFormatter.ofPattern("dd MMM yyyy, HH:mm").format(currentDateTime)

用户付款后,它会添加到我的 Firestore。当我检索数据时,它只是按月的日期递减。

    fun getOrderList(activity: Fragment, recyclerView: RecyclerView) {
        mFirestore.collection(Constants.ORDERS)
            .orderBy("date", Query.Direction.DESCENDING)
            .get()
            .addOnSuccessListener { result ->

                val orderItem = result.toObjects(UserOrderList::class.java)
                recyclerView.adapter = OrderListItemAdapter(activity, activity.requireContext(), orderItem)
            }
    }

Firestore data structure

我的日期输出像 2021 年 6 月 6 日 10:50 -> 2021 年 11 月 5 日 14:22 -> 2021 年 5 月 3 日 10:58 -> 2021 年 4 月 3 日 09:13

Date image result

如何将日期从最新到最旧排序并将其列出到我的 RecyclerView 中?

【问题讨论】:

  • 请编辑您的问题并将您的数据库结构添加为屏幕截图。
  • @AlexMamo 我已经上传了我的数据库结构。我应该如何编辑我的问题?

标签: android firebase kotlin google-cloud-platform google-cloud-firestore


【解决方案1】:

您没有得到想要的结果,因为文档中的 date 字段是一个字符串,当您订购字符串时,顺序是 lexicographical

要解决这个问题,您必须将字段的类型更改为Firestore Timestamp,然后您的查询将按预期工作。

【讨论】:

  • 如果我使用时间戳,它仍然可以使用时间格式吗?
  • 是的。 Timestamp 对象包含具有纳秒精度的时间分量。
  • 你能教我怎么写吗?我还是新手,不太熟悉,不明白如何编码日期格式。
  • 您应该根据答案中的信息自行尝试,如果出现其他问题,请提出另一个问题。
  • 我试图在我的适配器中设置 DateTimeFormatter,但它不起作用并获得了必需的:TemporalAccessor。 val date = item.date!!.toDate() val formattedDate = DateTimeFormatter.ofPattern("dd MMM yyyy, HH:mm").format(date)
【解决方案2】:

我会在 Firestore 中再添加一个字段,它以毫秒为单位接受 Unix time。让我们致电order_created_date。然后在检索订单列表时,您可以使用相同的orderBy("order_created_date",Query.Direction.DESCENDING) 方法。在这种情况下,它将比较数字。

我还建议使用这种获取当前时间的方法

val currentDateTime = Calendar.getInstance()
currentDateTime.timeInMillis

因为您的方法 LocalDateTime.now() 需要 API 级别 26 或更高。

问候。

【讨论】:

  • 可以格式化日期吗?我还是新手,不熟悉日期
  • 是的,您可以将 Unix 时间格式化为您想要的任何日期格式。另外,我同意@Alex 的解释。他的方法与这个几乎相同。比较不应该是字符串)
猜你喜欢
  • 1970-01-01
  • 2019-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
  • 1970-01-01
相关资源
最近更新 更多