2013-12-18 37 views
0

我对日历对象进行比较时目前有非常奇怪的行为。Java日历比较方法没有返回正确的结果

我有一种方法是确定当前日期asOfDate是否在31-DEC-13 lastDayOfDec13之后。 asOfDate = 09-JAN-14。我以前使用过类似的比较方法,但我不确定为什么这根本不起作用。

09-JAN-14绝对是在31-DEC-13之后,但它返回false。

我的代码如下:

private Boolean isTodayAfterDec2013() throws Exception { 
    Calendar asOfDate = getAsOfDate(); 

    Calendar lastDayOfDec13 = getAsOfDate(); 
    lastDayOfDec13.set(Calendar.YEAR, 2013); 
    lastDayOfDec13.set(Calendar.MONTH, Calendar.DECEMBER); 
    lastDayOfDec13.set(Calendar.DAY_OF_MONTH, 31); 

    System.out.println("lastDayOfDec13 "+CommonUtils.getDatebaseFormattedDate(lastDayOfDec13)); 
    System.out.println("asOfDate "+CommonUtils.getDatebaseFormattedDate(asOfDate)); 

    System.out.println("asOfDate.after(lastDayOfDec13) " + asOfDate.after(lastDayOfDec13)); 
    System.out.println("asOfDate.compareTo(lastDayOfDec13) " + asOfDate.compareTo(lastDayOfDec13)); 

    if(asOfDate.after(lastDayOfDec13)) { 
     System.out.println("Today is after 31-DEC-13"); 
     return true; 
    } 
    return false; 

} 

我的控制台打印:

lastDayOfDec13 31-DEC-13

asOfDate 09-JAN-14

asOfDate.after( lastDayOfDec13)false

asOfDate.compareTo(lastDayOfDec13)-1

有没有关于日历对象的东西,我不明白?今年应该工作得很好。另外,我的要求是使用Calendar对象,我不能使用JODA或任何外部库。

任何帮助将不胜感激。谢谢。

+0

似乎为我工作的罚款。我唯一没有的是'getAsOfDate()'返回的值。尝试使用'SimpleDateFormat'来更充分地设置值的格式,以便您可以看到整年...... – MadProgrammer

+0

是两个日历'GregorianCalendar'? – BevynQ

+0

日历比较时间。两个日历的getTime()输出是什么? – BevynQ

回答

0

你的功能getAsOfDate()一定是错误的...

public static void main(String[] args) { 
    Calendar asOfDate = Calendar.getInstance(); 
    asOfDate.set(Calendar.YEAR, 2014); 
    asOfDate.set(Calendar.MONTH, Calendar.JANUARY); 
    asOfDate.set(Calendar.DAY_OF_MONTH, 9); 

    Calendar lastDayOfDec13 = Calendar.getInstance(); 
    lastDayOfDec13.set(Calendar.YEAR, 2013); 
    lastDayOfDec13.set(Calendar.MONTH, Calendar.DECEMBER); 
    lastDayOfDec13.set(Calendar.DAY_OF_MONTH, 31); 
    // System.out.println("lastDayOfDec13 "+CommonUtils.getDatebaseFormattedDate(lastDayOfDec13)); 
    // System.out.println("asOfDate "+CommonUtils.getDatebaseFormattedDate(asOfDate)); 

    System.out.println("asOfDate.after(lastDayOfDec13) " + asOfDate.after(lastDayOfDec13)); 
    System.out.println("asOfDate.compareTo(lastDayOfDec13) " + asOfDate.compareTo(lastDayOfDec13)); 

    if(asOfDate.after(lastDayOfDec13)) { 
     System.out.println("Today is after 31-DEC-13"); 
    } 
} 

输出

asOfDate.after(lastDayOfDec13) true 
asOfDate.compareTo(lastDayOfDec13) 1 
Today is after 31-DEC-13 
+0

我不确定getAsOfDate()方法(这是在系统中使用的常用方法)是如何错误的。我还将asOfDate的值直接打印到控制台。你有什么想法会发生什么? – Richard