------------------------------------------------------------------------

 

 

The Year 2000 Problem...

 

 

 

------------------------------------------------------------------------

 

This is the problem: Almost all computer-based systems will be adversely affected by the arrival of the Year 2000 (01/01/2000), unless action is taken now to replace, update, or change components of these systems to eliminate or otherwise mitigate the effects of this event.

 

The millennium poses a significant problem for software maintenance. Dates, time, and time duration are used in almost every computer based application and improper calculation of these values can cause a malfunction which may have catastrophic effects.

Unfortunately, the problem is not isolated to programming errors caused by the use of the two-digit year coding scheme. The year 2000 presents a "triple witching hour" of potential traps for designers and coders. In addition to the two-digit year coding, there are distinct issues surrounding the use of the six-digit date representation, and still other risks caused by the calculation of the leap year. And just to make matters worse, January 1, 2000 falls on a Saturday. Problems caused by coding errors may not be discovered until the next regular working day, allowing enough time for the errors to inflict a great deal of damage.

 

The problem manifests itself in three related ways.

 

Two-Digit Year Coding

 

Use of two digits to represent the year is expected to be the most common cause of year 2000 failure. Applications that require the user to enter a date routinely present a two-digit field to the operator in an attempt to reduce the number of keystrokes needed to enter data. Failure to append the correct century to the value after input results in an inability to distinguish between 1900 and 2000. For the most part, this shortcoming was not an issue earlier in the century; however, as the year 2000 approaches, the capability to differentiate between dates in the twentieth century and dates in the twenty-first century will be a necessary requirement for a successful system.

 

Six-Digit Date Coding

 

Six-digit date coding is common in administrative information systems. Planning and scheduling systems, human resources systems, financial and billing systems, and many other programs use the convention where a calendar date is represented as two digits for year, two digits for month, and two digits for day. Using six digit date coding, April 12, 1954 would be represented as 540412. This coding method is typically used where the application is attempting to determine which of two dates is earlier in time, or if a certain deadline has passed. These tests are frequently coded with a single inequality statement used to compare the two six-digit dates.

 

The Leap Year

 

The third complicating factor in the millennium problem is the leap year calculation. It is evident that many people are unaware of the rules for determining whether the current year is a leap year. In fact, one user wrote a Software Problem Report against the run-time library routines for an operating system complaining that the year 2000 was being incorrectly identified by it as a leap year.

 

The year 2000 is a leap year. The three rules which the Gregorian calendar uses to determine leap year are as follows:

 

1.Years divisible by four are leap years, unless...

2.Years also divisible by 100 are not leap years, except...

3.Years divisible by 400 are leap years.

 

Therefore, the year 2000 is a leap year according to rule number three.

 

It is interesting to note that the above rules apply only to the Gregorian calendar. The Julian calendar, named after Julius Caesar, represents dates as the number of days since the founding of ancient Rome. Other dates, which are written as two digits for the year and three digits for the day of the year, are often used to compute the number of days between days. To calculate the number of days between two given dates, two Gregorian dates are translated into Julian dates and subtracted to yield the number of days between the two dates. Different representations for storing the year, month, and day in a fixed number of digits and shortcuts to converting dates to full Julian date format will all overflow during the period 1998-2001.