java - 为什么这个 Java 日历比较不好?

标签 java

当我尝试与日期进行比较时,我遇到了 Java Calendar 类无法解释的问题。我正在尝试与日历进行比较 并确定它们的差异是否大于 1 天,并根据该差异做事。但它不起作用。

如果我对这两个日期执行此操作:

    String currDate = aCurrentUTCCalendar.getTime().toString();
    String localDate = aLocalCalendar.getTime().toString();

我得到这些结果:

    currDate  = "Thu Jan 06 05:58:00 MST 2010"
    localDate = "Tue Jan 05 00:02:00 MST 2010"

这是正确的。

但是如果我这样做:

    long curr = aCurrentUTCCalendar.getTime().getTime();
    long local = aLocalCalendar.getTime().getTime();

我得到了这些结果:(自纪元以来的毫秒数)

    curr  = -125566110120000 
    local =  1262674920000 

由于两者之间只有大约 30 小时的差异,因此幅度差异很大,更不用说令人讨厌的负 签名。

如果我这样做会导致问题:

long day = 60 * 60 * 24 * 1000; // 86400000 millis, one day

if( local - curr > day )
{
    // do something
}

怎么了?为什么 getTime().toString() 调用正确,但 getTime().getTime() 调用却大不相同?

我在 WinXP 上使用 jdk 1.6_06。由于各种原因无法升级JDK。

最佳答案

您的当前日期是“B.C.E. 2010-01-06”(Before Common Era),即 4019 (2x2010 - 1) 年前。

试试这个:

public class StrangeDate {

  public static void main(String[] args) {
    Date d = new Date(-125566110120000L);
    System.out.println(d.toString());
    //prints 'Thu Jan 06 13:58:00 CET 2010' in my locale

    Calendar c = Calendar.getInstance();
    c.setTime(d);
    c.add(Calendar.YEAR, 4019);

    System.out.println(c.getTime().toString());
    //prints 'Wed Jan 06 13:58:00 CET 2010' in my locale
  }

}

问题是:你做了什么得到这个aCurrentUTCCalendar

关于java - 为什么这个 Java 日历比较不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2492691/

相关文章:

java - 卡萨布兰卡时区的偏移量错误(java)

java - 返回节点列表中的最后一个元素

java - 带有用户输入的标记变量以退出

java - ConcurrentHashMap的线程内存管理

java - 添加新节点添加 LinkedList 的开头和末尾

java - 我可以使用什么 Java 库来搜索图像中具有公差的颜色?

java - 在 Sun Java System Web 服务器中保留客户端 IP 地址

java - Spring Data JPA - "could not initialize proxy - no Session"- 方法标记为事务性

java - 匿名类可以访问其封闭类的成员吗?

java - JMX : cant connect from Windows box to monitor JMX port on a Linux system