Re: DST bug in java?
- Subject: Re: DST bug in java?
- From: "deepak aggarwal" <email@hidden>
- Date: Sat, 22 Dec 2007 08:34:06 +0530
- Delivered-to: email@hidden
- Delivered-to: email@hidden
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; bh=FzbV6ehRvip7s13iu4OP69mUZaltQ1OBiGCGr+W4F3g=; b=EIXWheOHTbq04Q4KFLtB/Uc3sMIiaZYrUjGB5jjilQNIojqgixmyfkjTS48clooS+p5kXA7go646gjRKmhVpDZdMwzqn+Ne8D1seyaz6BZ3LRGn4d1ZUl2s7aCKVPB/zPaPVY+8XJFD2Q2ppQxFNdSbpMqpFLhGZktZQrnimiQo=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=UrTPS1ByL3xnvQfJLwKw8H/05CjoUDA0UE0wT/GwuRf+LV13V/xCgq6KRacRUnVjd4izoqzNAI+DOJxZa2hkNhcI7JOsOP3/L8ab2JpivQhU+q/EEPs0kNWc0XhX0JE+eCuID1LKU0/5F2XIB1cX3zdK7THq/nh7+IngZVLyMG4=
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.