Mailing Lists: Apple Mailing Lists

Image of Mac OS face in stamp
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: DST bug in java?



Try the code below. Changes from your code are:

a) Explicity set the timezone as "America/New_York"
b) Explicitly set the DST_OFFSET to make your intention clear that you
want 1AM to mean before or after DST switch.

I tested it by changing my system clock to different times and it always works.

private static void testDiffBetweenTimesDuringDSTSwitch() {

Calendar calendarStart = Calendar.getInstance();

calendarStart.setTimeZone(TimeZone.getTimeZone("America/New_York"));

calendarStart.set(2007, Calendar.NOVEMBER, 3, 18, 0);



Calendar calendarEnd = Calendar.getInstance();

calendarEnd.setTimeZone(TimeZone.getTimeZone("America/New_York"));

calendarEnd.set(2007, Calendar.NOVEMBER, 4, 1, 0);

calendarEnd.set(Calendar.DST_OFFSET, 3600000);

printTimeDiff(calendarStart, calendarEnd);

}



/** static void testDiffBetweenTimesDuringDSTSwitch() {

Calendar calendarStart = Calendar.getInstance();

calendarStart.setTimeZone(TimeZone.getTimeZone("America/New_York"));

calendarStart.set(2007, Calendar.NOVEMBER, 3, 18, 0);



Calendar calendarEnd = Calendar.getInstance();

calendarEnd.setTimeZone(TimeZone.getTimeZone("America/New_York"));

calendarEnd.set(2007, Calendar.NOVEMBER, 4, 1, 0);

calendarEnd.set(Calendar.DST_OFFSET, 3600000);

printTimeDiff(calendarStart, calendarEnd);

}



/**"America/New_York"));

calendarStart.set(2007, Calendar.NOVEMBER, 3, 18, 0);



Calendar calendarEnd = Calendar.getInstance();

calendarEnd.setTimeZone(TimeZone.getTimeZone("America/New_York"));

calendarEnd.set(2007, Calendar.NOVEMBER, 4, 1, 0);

calendarEnd.set(Calendar.DST_OFFSET, 3600000);

printTimeDiff(calendarStart, calendarEnd);

}



/**NOVEMBER, 3, 18, 0);



Calendar calendarEnd = Calendar.getInstance();

calendarEnd.setTimeZone(TimeZone.getTimeZone("America/New_York"));

calendarEnd.set(2007, Calendar.NOVEMBER, 4, 1, 0);

calendarEnd.set(Calendar.DST_OFFSET, 3600000);

printTimeDiff(calendarStart, calendarEnd);

}



/**"America/New_York"));

calendarEnd.set(2007, Calendar.NOVEMBER, 4, 1, 0);

calendarEnd.set(Calendar.DST_OFFSET, 3600000);

printTimeDiff(calendarStart, calendarEnd);

}



/**NOVEMBER, 4, 1, 0);

calendarEnd.set(Calendar.DST_OFFSET, 3600000);

printTimeDiff(calendarStart, calendarEnd);

}



/**DST_OFFSET, 3600000);

printTimeDiff(calendarStart, calendarEnd);

}



/**/**

* Assumes the given dates have 0 minutes and seconds components.*
Assumes the given dates have 0 minutes and seconds components.

*/*/

private static void printTimeDiff(Calendar calendarStart,

Calendar calendarEnd) {

long startMillisec = calendarStart.getTimeInMillis();

long endMillisec = calendarEnd.getTimeInMillis();

long diff = endMillisec - startMillisec;

long diffHours = diff / 3600000;

System.out.println("diffHours --> " + diffHours);

System.out.println("Start date DST Offset --> "private static void
printTimeDiff(Calendar calendarStart,

Calendar calendarEnd) {

long startMillisec = calendarStart.getTimeInMillis();

long endMillisec = calendarEnd.getTimeInMillis();

long diff = endMillisec - startMillisec;

long diffHours = diff / 3600000;

System.out.println("diffHours --> " + diffHours);

System.out.println("Start date DST Offset --> "long startMillisec =
calendarStart.getTimeInMillis();

long endMillisec = calendarEnd.getTimeInMillis();

long diff = endMillisec - startMillisec;

long diffHours = diff / 3600000;

System.out.println("diffHours --> " + diffHours);

System.out.println("Start date DST Offset --> "long endMillisec =
calendarEnd.getTimeInMillis();

long diff = endMillisec - startMillisec;

long diffHours = diff / 3600000;

System.out.println("diffHours --> " + diffHours);

System.out.println("Start date DST Offset --> "long diff = endMillisec
- startMillisec;

long diffHours = diff / 3600000;

System.out.println("diffHours --> " + diffHours);

System.out.println("Start date DST Offset --> "long diffHours = diff / 3600000;

System.out.println("diffHours --> " + diffHours);

System.out.println("Start date DST Offset --> "out.println("diffHours
--> " + diffHours);

System.out.println("Start date DST Offset --> "out.println("Start date
DST Offset --> "

+ calendarStart.get(Calendar.DST_OFFSET));

System.out.println("End date DST Offset --> "DST_OFFSET));

System.out.println("End date DST Offset --> "out.println("End date DST
Offset --> "

+ calendarEnd.get(Calendar.DST_OFFSET));

}DST_OFFSET));

}
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Java-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/java-dev/email@hidden

This email sent to email@hidden



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2007 Apple Inc. All rights reserved.