This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository wao. See http://git.codelutin.com/wao.git commit 53a85f0dc0014d97735acbb4a696a6f0a7bfaba9 Author: Brendan Le Ny <bleny@codelutin.com> Date: Tue Nov 4 10:56:50 2014 +0100 Quand on calcule les jours de mers entre deux dates comportant un changement d'heure (heure d'été/heure d'hiver), il semblerait que DateUtil.getDifferenceInDays donne un résultat faux. Réécriture de l'algo pour ne pas utiliser DateUtil. --- .../src/main/java/fr/ifremer/wao/WaoUtils.java | 10 ++++---- .../src/test/java/fr/ifremer/wao/WaoUtilsTest.java | 27 ++++++++++++++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/wao-persistence/src/main/java/fr/ifremer/wao/WaoUtils.java b/wao-persistence/src/main/java/fr/ifremer/wao/WaoUtils.java index 00f0c76..79211c0 100644 --- a/wao-persistence/src/main/java/fr/ifremer/wao/WaoUtils.java +++ b/wao-persistence/src/main/java/fr/ifremer/wao/WaoUtils.java @@ -159,10 +159,12 @@ public class WaoUtils { * @return la durée du voyage en jour de mer */ public static int getObservationTimeInDays(Date observationBeginDate, Date observationEndDate) { - int observationTimeInDays = DateUtil.getDifferenceInDays( - DateUtils.truncate(observationBeginDate, Calendar.DAY_OF_MONTH), - DateUtils.truncate(observationEndDate, Calendar.DAY_OF_MONTH)) + 1; - Verify.verify(observationTimeInDays > 0); + int observationTimeInDays = 0; + Date aDay = DateUtils.truncate(observationBeginDate, Calendar.DAY_OF_MONTH); + do { + observationTimeInDays += 1; + aDay = DateUtils.addDays(aDay, 1); + } while ( ! aDay.after(observationEndDate)); // not after équivaut à before ou equals return observationTimeInDays; } diff --git a/wao-persistence/src/test/java/fr/ifremer/wao/WaoUtilsTest.java b/wao-persistence/src/test/java/fr/ifremer/wao/WaoUtilsTest.java index 816ffb3..292c158 100644 --- a/wao-persistence/src/test/java/fr/ifremer/wao/WaoUtilsTest.java +++ b/wao-persistence/src/test/java/fr/ifremer/wao/WaoUtilsTest.java @@ -21,13 +21,16 @@ package fr.ifremer.wao; * #L% */ +import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; +import org.junit.Ignore; import org.junit.Test; import org.nuiton.util.DateUtil; import java.text.ParseException; +import java.util.Calendar; import java.util.Date; import java.util.Locale; import java.util.Map; @@ -85,6 +88,30 @@ public class WaoUtilsTest { } + @Test + public void testCetVsCest() { + + // on a un cas bizarre si changement d'heure entre le départ et l'arrivée + + Assert.assertEquals(1, WaoUtils.getObservationTimeInDays(DateUtil.createDate(0, 0, 21, 18, 3, 2011), DateUtil.createDate(0, 0, 23, 18, 3, 2011))); + Assert.assertEquals(2, WaoUtils.getObservationTimeInDays(DateUtil.createDate(0, 0, 21, 18, 3, 2011), DateUtil.createDate(0, 0, 23, 19, 3, 2011))); + Assert.assertEquals(3, WaoUtils.getObservationTimeInDays(DateUtil.createDate(0, 0, 21, 18, 3, 2011), DateUtil.createDate(0, 0, 23, 20, 3, 2011))); + Assert.assertEquals(4, WaoUtils.getObservationTimeInDays(DateUtil.createDate(0, 0, 21, 18, 3, 2011), DateUtil.createDate(0, 0, 23, 21, 3, 2011))); + Assert.assertEquals(5, WaoUtils.getObservationTimeInDays(DateUtil.createDate(0, 0, 21, 18, 3, 2011), DateUtil.createDate(0, 0, 23, 22, 3, 2011))); + Assert.assertEquals(6, WaoUtils.getObservationTimeInDays(DateUtil.createDate(0, 0, 21, 18, 3, 2011), DateUtil.createDate(0, 0, 23, 23, 3, 2011))); + Assert.assertEquals(7, WaoUtils.getObservationTimeInDays(DateUtil.createDate(0, 0, 21, 18, 3, 2011), DateUtil.createDate(0, 0, 23, 24, 3, 2011))); + Assert.assertEquals(8, WaoUtils.getObservationTimeInDays(DateUtil.createDate(0, 0, 21, 18, 3, 2011), DateUtil.createDate(0, 0, 23, 25, 3, 2011))); + Assert.assertEquals(9, WaoUtils.getObservationTimeInDays(DateUtil.createDate(0, 0, 21, 18, 3, 2011), DateUtil.createDate(0, 0, 23, 26, 3, 2011))); + Assert.assertEquals(10, WaoUtils.getObservationTimeInDays(DateUtil.createDate(0, 0, 21, 18, 3, 2011), DateUtil.createDate(0, 0, 23, 27, 3, 2011))); + Assert.assertEquals(11, WaoUtils.getObservationTimeInDays(DateUtil.createDate(0, 0, 21, 18, 3, 2011), DateUtil.createDate(0, 0, 23, 28, 3, 2011))); + Assert.assertEquals(12, WaoUtils.getObservationTimeInDays(DateUtil.createDate(0, 0, 21, 18, 3, 2011), DateUtil.createDate(0, 0, 23, 29, 3, 2011))); + + Assert.assertEquals(12, WaoUtils.getObservationTimeInDays(DateUtil.createDate(0, 0, 23, 18, 3, 2011), DateUtil.createDate(0, 0, 21, 29, 3, 2011))); + + checkObservationTimeInDays(DateUtil.createDate(0, 0, 23, 18, 3, 2011), DateUtil.createDate(0, 0, 21, 29, 3, 2011), 1); + + } + protected void checkObservationTimeInDays(Date observationBeginDate, Date observationEndDate, int expectedSize) { Map<Date, Integer> observationDaysByMonths = WaoUtils.getObservationDaysByMonths(observationBeginDate, observationEndDate); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.