Knowledge Base

FIX: Daylight Saving Time Transition and GMT Time Zone Errors

Article ID: 194768

Article Last Modified on 1/23/2007


APPLIES TO


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.

MORE INFORMATION

Steps to Reproduce Behavior

  1. 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());
        }
    }
    						
  2. 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).

REFERENCES

For more information about Microsoft SDK for Java, visit the following Microsoft Web site:
For the latest Knowledge Base articles and other support information on Visual J++ and the SDK for Java, see the following pages on the Microsoft Technical Support site:

Keywords: kbbug kbfix KB194768