按日期而不是按日排序

时间:2018-04-26 05:07:02

标签: java sorting date

如何按日期对事件进行排序,当我尝试时,它按日排序,但不是按日期排序。

例如,如果我们在01/02 / 201,23 / 04/201,01/06/2018上有三个事件,则当前结果如下所示,[01/02 / 2018,01 / 06/2018 ,23/04/2018]

谢谢!

1 个答案:

答案 0 :(得分:0)

这可能是因为数据库中的eventFrom列具有字符类型(例如varchar(10))。执行order by eventFrom时,数据库正在对字符串进行排序,而不是您和我在字符串中看到的日期。这样,首先按字母顺序排列,因为这是在字符串中的第一个,然后是月份的日期相同,按月,最后按年。因此01/02/2018出现在01/06/2018之前,因为它们与月份相同,而02出现在06之前。

两个明显的修复是

  • 最适合您的数据库列的数据类型date。然后排序将按照您预期的时间顺序排列。
  • 如果您的数据库没有提供date数据类型(它很可能会这样做),请将您的日期存储为字符串格式,包括年份,月份和月份。我建议您使用ISO 8601格式,因为这是一个广泛使用的标准,不太可能让您遇到任何麻烦。然后,您的日期将显示为2018-02-012018-04-232018-06-01,排序将按预期进行。

我在评论中提到您使用的是过时的日期和时间类。您需要的java.time类(现代Java日期和时间API)为LocalDate。 “本地”表示没有时区,“日期”表示没有时间的日期,因此这比旧式DateCalendar更合适。另一件非常好的事情是LocalDate.toString()完全符合我提到的ISO 8601格式。如果您无法避免字符串格式,这将非常方便:您不需要任何显式格式化程序来生成数据库中使用的格式。同样LocalDate.parse()将相同的格式解析回LocalDate对象而没有格式化程序。

链接