FIX: Daylight Savings Time Transition and GMT Time Zone Errors (194768)



The information in this article applies to:

  • Microsoft SDK for Java 2.0
  • Microsoft SDK for Java 2.02
  • Microsoft SDK for Java 2.01
  • Microsoft virtual machine
  • Microsoft ASP.NET (included with the .NET Framework) 1.0

This article was previously published under Q194768

SYMPTOMS

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

Specifically, the starting and ending dates for Daylight Savings Time may be incorrect. Also, the GMT time zone is treated as though it enters Daylight Savings 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 Savings 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 Savings 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:

Modification Type:MinorLast Reviewed:11/14/2005
Keywords:kbbug kbfix KB194768