Author: jcouteau Date: 2012-12-01 11:06:18 +0100 (Sat, 01 Dec 2012) New Revision: 2446 Url: http://nuiton.org/projects/nuiton-utils/repository/revisions/2446 Log: fixes #2462 : DateUtil.getYesterday returns wrong day Modified: trunk/nuiton-utils/src/main/java/org/nuiton/util/DateUtil.java trunk/nuiton-utils/src/test/java/org/nuiton/util/DateUtilTest.java Modified: trunk/nuiton-utils/src/main/java/org/nuiton/util/DateUtil.java =================================================================== --- trunk/nuiton-utils/src/main/java/org/nuiton/util/DateUtil.java 2012-11-16 17:00:15 UTC (rev 2445) +++ trunk/nuiton-utils/src/main/java/org/nuiton/util/DateUtil.java 2012-12-01 10:06:18 UTC (rev 2446) @@ -407,6 +407,12 @@ */ public static Date getYesterday(Date date) { Calendar cal = getDefaultCalendar(date); + if (cal.get(Calendar.MONTH)==Calendar.JANUARY && cal.get(Calendar.DAY_OF_MONTH)==1){ + cal.roll(Calendar.YEAR,false); + } + if (cal.get(Calendar.DAY_OF_MONTH)==1) { + cal.roll(Calendar.MONTH,false); + } cal.roll(Calendar.DAY_OF_MONTH, false); return cal.getTime(); } Modified: trunk/nuiton-utils/src/test/java/org/nuiton/util/DateUtilTest.java =================================================================== --- trunk/nuiton-utils/src/test/java/org/nuiton/util/DateUtilTest.java 2012-11-16 17:00:15 UTC (rev 2445) +++ trunk/nuiton-utils/src/test/java/org/nuiton/util/DateUtilTest.java 2012-12-01 10:06:18 UTC (rev 2446) @@ -316,4 +316,31 @@ actualWeek = DateUtil.truncateToDayOfWeek(aDate); Assert.assertEquals(expectedWeek, actualWeek); } + + @Test + public void testGetYesterday() { + + //Test normal yesterday + Date aDate = DateUtil.createDate(3,4,5); + Date expectedADate = DateUtil.createDate(2,4,5); + + //Test month change + Date bDate = DateUtil.createDate(1,12,12); + Date expectedBDate = DateUtil.createDate(30,11,12); + + //Test year change + Date cDate = DateUtil.createDate(1,1,12); + Date expectedCDate = DateUtil.createDate(31,12,11); + + //Test possible wrong change + Date dDate = DateUtil.createDate(3,1,12); + Date expectedDDate = DateUtil.createDate(2,1,12); + + + Assert.assertEquals(expectedADate, DateUtil.getYesterday(aDate)); + Assert.assertEquals(expectedBDate, DateUtil.getYesterday(bDate)); + Assert.assertEquals(expectedCDate, DateUtil.getYesterday(cDate)); + Assert.assertEquals(expectedDDate, DateUtil.getYesterday(dDate)); + + } }