r2292 - in trunk/nuiton-utils/src: main/java/org/nuiton/util test/java/org/nuiton/util
Author: bleny Date: 2012-01-26 15:26:52 +0100 (Thu, 26 Jan 2012) New Revision: 2292 Url: http://nuiton.org/repositories/revision/nuiton-utils/2292 Log: #1923 add a truncate to week utility method 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-01-19 11:45:45 UTC (rev 2291) +++ trunk/nuiton-utils/src/main/java/org/nuiton/util/DateUtil.java 2012-01-26 14:26:52 UTC (rev 2292) @@ -420,4 +420,26 @@ calendar.setTime(date); return calendar; } + + /** + * Truncate a date to its week (to monday). It's equivalent to a call to + * {@link org.apache.commons.lang3.time.DateUtils#truncate(java.util.Date, int)} + * and giving {@link java.util.Calendar#DAY_OF_WEEK} argument, but such a call + * raise an exception showing that this field is not supported. This method + * allows you to bypass this limitation. + * + * @param date any date + * @return a date in the same week as given date, a monday. All field below + * (hours, secondes, ms) are zeroed. + */ + public static Date truncateToDayOfWeek(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + return calendar.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-01-19 11:45:45 UTC (rev 2291) +++ trunk/nuiton-utils/src/test/java/org/nuiton/util/DateUtilTest.java 2012-01-26 14:26:52 UTC (rev 2292) @@ -25,6 +25,7 @@ package org.nuiton.util; +import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; @@ -34,7 +35,6 @@ import java.text.ParseException; import java.util.Calendar; import java.util.Date; -import java.util.GregorianCalendar; import java.util.Locale; /** @@ -294,4 +294,26 @@ Assert.assertEquals("Juli", juli); } + /** + * Shows that {@link org.nuiton.util.DateUtil#truncateToDayOfWeek(java.util.Date)} works + * fine and that using commons library for this operation is not possible. + */ + @Test + public void testTruncateToDayOfWeek() { + + Date aDate = DateUtil.createDate(23, 45, 6, 19, 10, 2011); + Date expectedWeek = DateUtil.createDate(17, 10, 2011); + Date actualWeek; + + // show that commons-lang do not support this operation with truncate + try { + actualWeek = DateUtils.truncate(aDate, Calendar.DAY_OF_WEEK); + Assert.assertEquals(expectedWeek, actualWeek); + } catch (IllegalArgumentException e) { + Assert.assertEquals(String.format("The field %d is not supported", Calendar.DAY_OF_WEEK), e.getMessage()); + } + + actualWeek = DateUtil.truncateToDayOfWeek(aDate); + Assert.assertEquals(expectedWeek, actualWeek); + } }
participants (1)
-
bleny@users.nuiton.org