【问题标题】:Map.lowerKey(Date) not workingMap.lowerKey(日期)不起作用
【发布时间】:2015-05-15 12:05:29
【问题描述】:

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

示例代码:

Calendar c = Calendar.getInstance();

        TreeMap<Date, String> treemap = new TreeMap<>();

        for (int i = 0; i < 5; i++) {
            treemap.put(c.getTime(), (i + 1) + "");

            if(i == 3)
                c.add(Calendar.DATE, 2);  // number of days to add
            else
                c.add(Calendar.DATE, 1);  // number of days to add
        }

        c = Calendar.getInstance();

        c.add(Calendar.DATE, 1);
        System.out.println("C_Time : "+ c.getTime() + ", L_Time: " + treemap.lowerKey(c.getTime()) + ", G_Time: " + treemap.higherKey(c.getTime()));

作为回应它给出:

C_Time:2015 年 5 月 16 日星期六 17:39:51 IST,L_Time:5 月 16 日星期六 17:39:51 IST 2015, G_Time: Sun May 17 17:39:51 IST 2015

这里 higherKey 值很好,但 lowerKey 返回相同的请求对象。

我在这里缺少什么?

【问题讨论】:

  • 请参考更新后的问题。

标签: java treemap


【解决方案1】:

如果您将输出更改为:

 System.out.println("C_Time : "+ c.getTime().getTime() 
      + ", L_Time: " + treemap.lowerKey(c.getTime()).getTime() 
      + ", G_Time: " + treemap.higherKey(c.getTime()).getTime());

(以毫秒时间打印Date),您将收到如下输出:

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

L_Time 被放入地图中,与 C_Time 不同,C_Time 是在几毫秒后创建的,这就是为什么这两个日期被视为不同的原因:L_Time &lt; C_Time。所以你的代码工作完全正确。

【讨论】:

【解决方案2】:

啊哈 :) 而不是去 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 指出问题。

【讨论】:

  • 使用Date() 将小时、分钟和秒归零是一种解决方法,由于时区问题(两个日期相同但在不同时区定义的日期仍然不同),这是错误的。 LocalDate 类专门设计用于存储独立于语言环境和/或时区的日期信息。
  • 没有得到..你能用任何例子解释一下吗!
猜你喜欢
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多