有 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上使用JDK1.6_06。由于各种原因,我无法升级JDK


共 (3) 个答案

  1. # 1 楼答案

    答案是使用JodaTime类。感谢您的介绍,它比Java的难以使用的东西更容易得到我想要的结果

    我认为这是Java的一个奇怪之处。Util。日期和Java。Util。日历类

    谢谢你的帮助

  2. # 2 楼答案

    您当前的日期是“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

  3. # 3 楼答案

    也许它打印“星期二5”和“星期六6”的事实表明你的约会有问题

    附言:不相关,但要做cal。getTime()。getTime(),您可以执行cal。getTimeInMillis()