我有如下所列的日期:
17/03/2015 09:38:39 AM
17/03/2015 10:52:26 AM
10/03/2015 08:30:56 AM
02/03/2015 09:18:10 AM
02/03/2015 09:37:23 AM
02/03/2015 11:25:01 AM
02/03/2015 11:29:00 AM
02/03/2015 11:42:38 AM
02/03/2015 12:04:39 PM
02/03/2015 12:09:05 PM
02/03/2015 01:17:09 PM
02/03/2015 01:29:08 PM
Run Code Online (Sandbox Code Playgroud)
我希望他们按照以下结果对它们进行排序:(同一日期应按时间戳排序)
17/03/2015 10:52:26 AM
17/03/2015 09:38:39 AM
10/03/2015 08:30:56 AM
02/03/2015 01:29:08 PM
02/03/2015 01:17:09 PM
02/03/2015 12:09:05 PM
02/03/2015 12:04:39 PM
02/03/2015 11:42:38 AM
02/03/2015 11:29:00 AM
02/03/2015 11:25:01 AM
02/03/2015 09:37:23 AM
02/03/2015 09:18:10 AM
Run Code Online (Sandbox Code Playgroud)
我尝试使用代码,但没有获得所需的输出:
Collections.sort(listOfDate, new Comparator<SR>() {
public int compare(SR m1, SR m2) {
try {
return m2.getCreatedDateActual().compareTo(m1.getCreatedD ateActual());
} catch (Exception e) {
}
return 0;
}
});
Run Code Online (Sandbox Code Playgroud)
输出是:
17/03/2015 10:52:26 AM
17/03/2015 09:38:39 AM
10/03/2015 08:30:56 AM
02/03/2015 12:09:05 PM
02/03/2015 12:04:39 PM
02/03/2015 11:42:38 AM
02/03/2015 11:29:00 AM
02/03/2015 11:25:01 AM
02/03/2015 09:37:23 AM
02/03/2015 09:18:10 AM
02/03/2015 01:29:08 PM (Getting wrong date here)
02/03/2015 01:17:09 PM (Getting wrong date here)
Run Code Online (Sandbox Code Playgroud)
这是我的 SR 课。
private String createdDateActual;
public void setCreatedDateActual(String createdDateActual) {
this.createdDateActual = createdDateActual;
}
public Date getCreatedDateActual() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss a");
return sdf.parse(createdDateActual);
}
Run Code Online (Sandbox Code Playgroud)
IMO 的核心问题是您没有日期集合 - 您有字符串集合。
我建议将这些字符串解析为更合适的数据类型 -如果可以的话,我会LocalDateTime在Joda Timejava.time或Joda Time中使用。那时(即当您有一个List<LocalDateTime>或类似的东西时),只需简单的排序即可完成正确的操作。
请注意,目前不仅仅是 AM/PM 会导致问题 - 例如,“12:05 AM”应该出现在“01:00 AM”之前。如果您的字符串采用 24 小时格式而不是使用 AM/PM,则这些都不会导致问题 - 但您仍然最好使用更自然的表示形式的数据。
现在您已经发布了用于比较的代码,如果您使用该代码将字符串转换为LocalDateTime值,您仍然会遇到同样的问题 - 因为您HH在解析代码中使用的是hh. 格式HH说明符适用于 24 小时值,很少适合与a(AM/PM 说明符)结合使用。相反,您应该使用hh01-12 范围内的值。
另外,有一个属性,其中 set 方法采用一种类型,但 get 方法返回完全不同的东西(分别在您的情况下),这是非常奇怪的。我鼓励你保持一致。StringDate
| 归档时间: |
|
| 查看次数: |
981 次 |
| 最近记录: |