Microsoft KB Archive/194768

= FIX: Daylight Saving Time Transition and GMT Time Zone Errors =

Article ID: 194768

Article Last Modified on 1/23/2007

-

APPLIES TO


 * Microsoft Software Development Kit for Java 2.02
 * Microsoft Software Development Kit for Java 2.02
 * Microsoft Software Development Kit for Java 2.01
 * Microsoft Java Virtual Machine
 * Microsoft ASP.NET 1.0

-



This article was previously published under Q194768



SYMPTOMS
Errors may occur in calculations involving Daylight Saving Time, or those involving conversions to and from Universal time ("UTC" or "Greenwich Mean Time").

Specifically, the starting and ending dates for Daylight Saving Time may be incorrect. Also, the GMT time zone is treated as though it enters Daylight Saving Time, when it should not. This affects the java.util.Date and java.util.Calendar classes, and methods of other classes that may depend on them.



CAUSE
The java.util.TimeZone and java.util.SimpleTimeZone classes initialized the GMT time zone incorrectly, and improperly performed calculations determining Daylight Saving Time.



RESOLUTION
Install a version of the Microsoft virtual machine in which these problems have been fixed (see STATUS section below).



STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug has been corrected in the Microsoft virtual machine, version 5.00.2829 and later, which can be found in the Microsoft SDK for Java version 3.0 and later. Please refer to the References section for more information.



Steps to Reproduce Behavior
  Enter the following code into a file named DateBug.java, and compile it. import java.util.Date;

public class DateBug {   public static void main( String[] arg ) throws Exception {       showDate( 98, 1, 1 ); showDate( 98, 3, 28 ); showDate( 98, 3, 29 ); showDate( 98, 4, 4 ); showDate( 98, 4, 5 ); showDate( 98, 7, 21 ); showDate( 98, 10, 24 ); showDate( 98, 10, 25 ); showDate( 98, 10, 30 ); showDate( 98, 10, 31 ); showDate( 98, 12, 20 );

System.in.read; }

static void showDate(int year, int month, int day) { Date d = new Date(year, month-1, day, 12, 0, 0); System.out.println(d + " local <=> GMT " + d.toGMTString); } }                        Execute the program using the command "jview DateBug".

You will observe that between Friday, March 27, and Sunday, March 29, the GMT time is moved forward, as though it were in Daylight Saving Time. Also, (at least in the United States) you will observe that Daylight Savings Time for the local time zone begins a day early (Saturday, April 4) and ends several days late (it should end Sunday, October 26).

