I can see how this might be useful. It is essentially the Duration between the start of two dates.
There are complications that this code doesn't handle. Firstly, DateMidnight is effectively deprecated as it doesn't handle the case where 00:00 to 01:00 does not exist due to DST. There are definitely other cases than 23, 24 and 35 hours days. Although I've never seen it, it would be possible for DST to skip 23:30 to 00:30, or repeat those times. That would haveto be handled as well. Finally, a Period is probably the right result type, once the data is calculated. So, yes poentially useful, but hard to implement (harder than the code below ;-) thanks Stephen On 22 November 2012 10:41, Joda forum Bill Comer <bill.j...@beanfactory.co.uk> wrote: > Hi all, > > I was recently had a requirement where I needed to determine if a day was a > LONG, SHORT or NORMAL day, > & I wondered if it would be a useful addition to Joda-Time. > > I have written it up here - > http://billcomer.blogspot.co.uk/2012/11/clock-changing-is-this-long-short-or.html > > But here it is as well. > > public enum ClockChangeInfo { > > LONG_DAY(90000000, 25), SHORT_DAY(82800000, 23), NORMAL_DAY(86400000, 24), > INDETERMINATE(0, 0); > > private int mMsecs; > private int mHrs; > private static final Map<Integer, ClockChangeInfo> MSEC = new > HashMap<Integer, ClockChangeInfo>(); > > static { > for (ClockChangeInfo cci : values()) { > MSEC.put(new Integer(cci.mMsecs), cci); > } > } > > ClockChangeInfo(int aMsecs, int aHrs) { > mMsecs = aMsecs; > mHrs = aHrs; > } > > public int getHrs(ClockChangeInfo aCci) { > return aCci.mHrs; > } > > public static ClockChangeInfo getDayType(DateMidnight dateToCheck) { > DateMidnight nextDay = dateToCheck.plusDays(1); > > //this is a safe convert as it is only for day(n) - day(n-1) > Integer millis = (int)(nextDay.getMillis() - dateToCheck.getMillis()); > ClockChangeInfo cci = MSEC.get(millis); > if (cci == null) { > return INDETERMINATE; > } > return cci; > } > } > > public class ClockChangeUtil { > > public static ClockChangeInfo getDayType(DateMidnight dateToCheck) { > return ClockChangeInfo.getDayType((dateToCheck)); > } > > public static int getNumHoursInDay(DateMidnight dateToCheck) { > ClockChangeInfo dayType = ClockChangeUtil.getDayType(dateToCheck); > return dayType.getHrs(dayType); > } > > public static int getNumHalfHoursINMonthSoFar(DateMidnight dateToCheck) { > int numHours = 0; > int day = dateToCheck.getDayOfMonth(); > > if (day == 1) { > return 0; > } > > DateMidnight dm = dateToCheck.minusDays(1); > > do { > numHours += getNumHoursInDay(dm); > > dm = dm.minusDays(1); > day--; > } while (day > 1); > > return numHours * 2; > } > } > > > & some tests > > public class ClockChangeUtilUnitTest > { > > @Test > public void test_isLongDay() throws Exception > { > DateMidnight dm28 = new DateMidnight(2011, 10, 28); > DateMidnight dm29 = new DateMidnight(2011, 10, 29); > DateMidnight dm30 = new DateMidnight(2011, 10, 30); > DateMidnight dm31 = new DateMidnight(2011, 10, 31); > > assertEquals(ClockChangeInfo.NORMAL_DAY, > ClockChangeUtil.getDayType(dm28)); > assertEquals(ClockChangeInfo.NORMAL_DAY, > ClockChangeUtil.getDayType(dm29)); > assertEquals(ClockChangeInfo.LONG_DAY, > ClockChangeUtil.getDayType(dm30)); > assertEquals(ClockChangeInfo.NORMAL_DAY, > ClockChangeUtil.getDayType(dm31)); > } > > > @Test > public void test_isShortDay() throws Exception > { > DateMidnight dm26 = new DateMidnight(2011, 3, 26); > DateMidnight dm27 = new DateMidnight(2011, 3, 27); > DateMidnight dm28 = new DateMidnight(2011, 3, 28); > DateMidnight dm29 = new DateMidnight(2011, 3, 29); > > assertEquals(ClockChangeInfo.NORMAL_DAY, > ClockChangeUtil.getDayType(dm26)); > assertEquals(ClockChangeInfo.SHORT_DAY, > ClockChangeUtil.getDayType(dm27)); > assertEquals(ClockChangeInfo.NORMAL_DAY, > ClockChangeUtil.getDayType(dm28)); > assertEquals(ClockChangeInfo.NORMAL_DAY, > ClockChangeUtil.getDayType(dm29)); > } > > > @Test > public void testClockChange() throws Exception > { > long millisInANormalDay = 24 * 60 * 60 * 1000; > long millisInALongDay = 25 * 60 * 60 * 1000; > > DateMidnight dm28 = new DateMidnight(2011, 10, 28); > DateMidnight dm29 = new DateMidnight(2011, 10, 29); > DateMidnight dm30 = new DateMidnight(2011, 10, 30); > DateMidnight dm31 = new DateMidnight(2011, 10, 31); > > assertEquals(millisInANormalDay, dm29.getMillis() - dm28.getMillis()); > assertEquals(millisInANormalDay, dm30.getMillis() - dm29.getMillis()); > assertEquals(millisInALongDay, dm31.getMillis() - dm30.getMillis()); > > > DateTime dt28 = new DateTime(dm28); > DateTime dt29 = new DateTime(dm29); > DateTime dt30 = new DateTime(dm30); > DateTime dt31 = new DateTime(dm31); > > assertEquals(millisInANormalDay, dt29.getMillis() - dt28.getMillis()); > assertEquals(millisInANormalDay, dt30.getMillis() - dt29.getMillis()); > assertEquals(millisInALongDay, dt31.getMillis() - dt30.getMillis()); > > assertTrue(dt28.getZone().equals(dt29.getZone())); > assertTrue(dt28.getZone().equals(dt30.getZone())); > assertTrue(dt28.getZone().equals(dt31.getZone())); > } > > @Test > public void test_getNumHoursInDay() throws Exception > { > > DateMidnight dm26 = new DateMidnight(2011, 3, 26); > DateMidnight dm27 = new DateMidnight(2011, 3, 27); > DateMidnight dm28 = new DateMidnight(2011, 3, 28); > DateMidnight dm29 = new DateMidnight(2011, 3, 29); > > assertEquals(24, ClockChangeUtil.getNumHoursInDay(dm26)); > assertEquals(23, ClockChangeUtil.getNumHoursInDay(dm27)); > assertEquals(24, ClockChangeUtil.getNumHoursInDay(dm28)); > assertEquals(24, ClockChangeUtil.getNumHoursInDay(dm29)); > } > > } > > ------------------------------------------------------------------------------ > Monitor your physical, virtual and cloud infrastructure from a single > web console. Get in-depth insight into apps, servers, databases, vmware, > SAP, cloud infrastructure, etc. Download 30-day Free Trial. > Pricing starts from $795 for 25 servers or applications! > http://p.sf.net/sfu/zoho_dev2dev_nov > _______________________________________________ > Joda-interest mailing list > Joda-interest@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/joda-interest > ------------------------------------------------------------------------------ Monitor your physical, virtual and cloud infrastructure from a single web console. Get in-depth insight into apps, servers, databases, vmware, SAP, cloud infrastructure, etc. Download 30-day Free Trial. Pricing starts from $795 for 25 servers or applications! http://p.sf.net/sfu/zoho_dev2dev_nov _______________________________________________ Joda-interest mailing list Joda-interest@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/joda-interest