Java lowerKey地图(日期)不工作

Java lowerKey地图(日期)不工作,java,treemap,Java,Treemap,我正在写一个应用程序,我需要阅读上一个较低和下一个较高的日期。为此,我使用了来自的参考。但是Map.lowerKeyDate每次都返回相同的请求..日期对象 示例代码: 对此,它提出: C_时间:2015年5月16日星期六17:39:51 IST,L_时间:5月16日星期六17:39:51 IST 2015年,G_时间:2015年5月17日星期日17:39:51 在这里,较高的键值可以,但较低的键返回相同的请求对象 这里有什么遗漏吗?如果您将输出更改为: System.out.println(

我正在写一个应用程序,我需要阅读上一个较低和下一个较高的日期。为此,我使用了来自的参考。但是Map.lowerKeyDate每次都返回相同的请求..日期对象

示例代码:

对此,它提出:

C_时间:2015年5月16日星期六17:39:51 IST,L_时间:5月16日星期六17:39:51 IST 2015年,G_时间:2015年5月17日星期日17:39:51

在这里,较高的键值可以,但较低的键返回相同的请求对象


这里有什么遗漏吗?

如果您将输出更改为:

 System.out.println("C_Time : "+ c.getTime().getTime() 
      + ", L_Time: " + treemap.lowerKey(c.getTime()).getTime() 
      + ", G_Time: " + treemap.higherKey(c.getTime()).getTime());
以毫秒时间打印日期,您将收到如下输出:

C_Time : 1431779062507, L_Time: 1431779062492, G_Time: 1431865462492
                   ^^^                    ^^^

放在地图中的L_时间与在几毫秒后创建的C_时间不同,这就是为什么这两个日期被视为不同的原因:L_时间啊哈:取而代之的是使用LocalDate或JodaTime进行以下技巧工作:

  public Calendar getCleanDate(Calendar targetDate) {
        Calendar newDate = (Calendar) targetDate.clone();
        newDate.setLenient(false);
        newDate.set(Calendar.HOUR_OF_DAY, 0);
        newDate.set(Calendar.MINUTE,0);
        newDate.set(Calendar.SECOND,0);
        newDate.set(Calendar.MILLISECOND,0);
        return newDate;
    }

感谢Sasha和Jean指出了这个问题。

请参考更新的问题。明白了..有意义…所以我的要求是,有没有办法获取给定日期索引的上一个/下一个dateBy Day?@Shubh使用LocalDate实现这一点:使用时间为零的小时、分钟和秒的日期是一种变通方法,这是错误的,因为时区问题两个日期有相同的一天,但在不同的时区定义仍然是不同的。LocalDate类是专门设计用来存储独立于区域设置和/或时区的日期信息的。不获取..请用任何例子解释一下!参见答案和讨论
  public Calendar getCleanDate(Calendar targetDate) {
        Calendar newDate = (Calendar) targetDate.clone();
        newDate.setLenient(false);
        newDate.set(Calendar.HOUR_OF_DAY, 0);
        newDate.set(Calendar.MINUTE,0);
        newDate.set(Calendar.SECOND,0);
        newDate.set(Calendar.MILLISECOND,0);
        return newDate;
    }