如何按日期对事件进行排序,当我尝试时,它按日排序,但不是按日期排序。
例如,如果我们在01/02 / 201,23 / 04/201,01/06/2018上有三个事件,则当前结果如下所示,[01/02 / 2018,01 / 06/2018 ,23/04/2018]
谢谢!
答案 0 :(得分:0)
这可能是因为数据库中的eventFrom
列具有字符类型(例如varchar(10)
)。执行order by eventFrom
时,数据库正在对字符串进行排序,而不是您和我在字符串中看到的日期。这样,首先按字母顺序排列,因为这是在字符串中的第一个,然后是月份的日期相同,按月,最后按年。因此01/02/2018
出现在01/06/2018
之前,因为它们与月份相同,而02
出现在06
之前。
两个明显的修复是
date
。然后排序将按照您预期的时间顺序排列。date
数据类型(它很可能会这样做),请将您的日期存储为字符串格式,包括年份,月份和月份。我建议您使用ISO 8601格式,因为这是一个广泛使用的标准,不太可能让您遇到任何麻烦。然后,您的日期将显示为2018-02-01
,2018-04-23
和2018-06-01
,排序将按预期进行。我在评论中提到您使用的是过时的日期和时间类。您需要的java.time
类(现代Java日期和时间API)为LocalDate
。 “本地”表示没有时区,“日期”表示没有时间的日期,因此这比旧式Date
和Calendar
更合适。另一件非常好的事情是LocalDate.toString()
完全符合我提到的ISO 8601格式。如果您无法避免字符串格式,这将非常方便:您不需要任何显式格式化程序来生成数据库中使用的格式。同样LocalDate.parse()
将相同的格式解析回LocalDate
对象而没有格式化程序。
java.time
。