Try compiling the latest from SVN. I hope bugs like this are now
fixed, but as I'm on holiday right now, I cannot check...
Stephen

On 21/04/2011, Chris Povirk <[email protected]> wrote:
> Is there something that we're overlooking, or is this a bug?  Thanks
> for any help.
>
> $ cat DividedDateTimeFieldDaylightSavingRoundingBug.java
> import org.joda.time.*;
> import org.joda.time.chrono.*;
> import org.joda.time.field.*;
>
> public class DividedDateTimeFieldDaylightSavingRoundingBug {
>   private static final DateTimeZone LOS_ANGELES =
>       DateTimeZone.forID("America/Los_Angeles");
>
>   /**
>    * Demonstrate that rounding the second 1AM of a DST-change day back to
> the
>    * nearest 10 minutes actually rounds it back by an hour.
>    */
>   public static void main(String[] args) {
>     Instant fallSecond1Am = new Instant(1289120400000L);
>
>     // Sanity checks.
>     /*
>      * 1. We really do have the second 1:00AM of the fall DST switchover.
>      * Confirm this (a) by adding one hour to the first 1:00AM and (b) by
>      * comparing toString() to the expected value:
>      */
>     Instant fallFirst1Am = new DateTime()
>         .withZone(LOS_ANGELES)
>         .withDate(2010, 11, 7)
>         .withTime(1, 0, 0, 0)
>         .toInstant();
>     assertEquals(
>         fallSecond1Am, fallFirst1Am.plus(Hours.ONE.toStandardDuration()));
>     assertEquals("2010-11-07T01:00:00.000-07:00",
>         new DateTime(fallFirst1Am.getMillis(), LOS_ANGELES).toString());
>     assertEquals("2010-11-07T01:00:00.000-08:00",
>         new DateTime(fallSecond1Am.getMillis(), LOS_ANGELES).toString());
>     /*
>      * 2. Rounding the FIRST 1AM back to the nearest 10-minute boundary
> (i.e.,
>      * itself) is a no-op, as expected:
>      */
>     assertEquals(fallFirst1Am, floor10Minutes(fallFirst1Am));
>
>     /*
>      * Rounding the SECOND 1AM back to the nearest 10-minute boundary (i.e.,
>      * itself) should be a no-op, too, but Joda instead rounds a full hour
> back
>      * to the FIRST 1:00AM (note that the times in the failure message are
> UTC):
>      *
>      * expected:<2010-11-07T09:00:00.000Z> but
> was:<2010-11-07T08:00:00.000Z>
>      */
>     assertEquals(fallSecond1Am, floor10Minutes(fallSecond1Am));
>   }
>
>   private static Instant floor10Minutes(Instant in) {
>     return new Instant(getTenMinuteField().roundFloor(in.getMillis()));
>   }
>
>   private static DividedDateTimeField getTenMinuteField() {
>     DateTimeFieldType minuteFieldType = DateTimeFieldType.minuteOfHour();
>     // Note: If we use getInstanceUTC() instead of GST, the test passes.
>     Chronology chronology = ISOChronology.getInstance(LOS_ANGELES);
>     DateTimeField oneMinuteField = minuteFieldType.getField(chronology);
>     return new DividedDateTimeField(oneMinuteField, minuteFieldType, 10);
>   }
>
>   private static void assertEquals(Object expected, Object actual) {
>     if (!expected.equals(actual)) {
>       throw new RuntimeException(
>           "expected:<" + expected + "> but was:<" + actual + ">");
>     }
>   }
> }
> $ javac -classpath .:joda-time-1.6.2.jar
> DividedDateTimeFieldDaylightSavingRoundingBug.java && java -classpath
> .:joda-time-1.6.2.jar DividedDateTimeFieldDaylightSavingRoundingBug
> Exception in thread "main" java.lang.RuntimeException:
> expected:<2010-11-07T09:00:00.000Z> but was:<2010-11-07T08:00:00.000Z>
>         at
> DividedDateTimeFieldDaylightSavingRoundingBug.assertEquals(DividedDateTimeFieldDaylightSavingRoundingBug.java:63)
>         at
> DividedDateTimeFieldDaylightSavingRoundingBug.main(DividedDateTimeFieldDaylightSavingRoundingBug.java:46)
>
> ------------------------------------------------------------------------------
> Benefiting from Server Virtualization: Beyond Initial Workload
> Consolidation -- Increasing the use of server virtualization is a top
> priority.Virtualization can reduce costs, simplify management, and improve
> application availability and disaster protection. Learn more about boosting
> the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev
> _______________________________________________
> Joda-interest mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/joda-interest
>

------------------------------------------------------------------------------
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network 
management toolset available today.  Delivers lowest initial 
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
_______________________________________________
Joda-interest mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/joda-interest

Reply via email to