Frequently Asked Questions (FAQ)
About the Y2K Problem

doug.white@acm.org


Description of Y2K Problem

The Year 2000 problem (Y2K, Millennium Bug, Millennium Virus) came about due to programming practices involving the use of 6 digit dates (dd/mm/yy) vs. 8 digit dates (dd/mm/yyyy). This results in the possibility of a date such as 31 being misinterpreted (is it 1931 or 2031?). Thus, any computer program which deals with 6 digit dates is susceptible to the Y2K problem.

The Y2K problem involves two key date issues:

  1. Date mathematics. For years businesses have used date math to compute things such as aging schedules, due dates, past due accounts, etc. Many computer applications now support the use of date mathematics (Lotus 1-2-3, MS-Excel, MS-Access, etc.) These applications all work by using a base year (often Jan. 01, 1900) as a starting point and then tracking the date and time numerically from that point (how much time has elapsed since Jan 01. 1900). Thus, a time might be stated as a fractional component of the day integer (35927.63 = May 12, 1998, 3:08 pm based on MS-Excel). This means that to compute the difference between Jan 01, 1998 and Jan 01, 1999 would result in 365 days. Computing the difference in today and when a bill was incurred would indicate how old a debt was (e. g. 45 days = past due). So, when the year 2000 comes into play using a 6 digit date we end up with situations like Jan 01, 00 - May 12, 1998. If this is misinterpreted by a computer system as 1900 then the calculation will result in a large negative number (in this case -35,926). This number may or may not be a problem the computer application can deal with. It is possible that this number will be made into the absolute value (the negative sign is dropped if no space is reserved to hold it) which will cause even more confusion. Imagine if your debt went from 22 days old to 35,926 days old. The past due notice would give you a surprise.

    In old COBOL (a programming language that is still in widespread use) dealing with date math is even more complicated. Dates in COBOL are typically stored in three different locations (a month, a day, and a year). The year is often stored as 2 digits to save space and simplify output problems with pre-printed forms. In some cases, COBOL programs were written with 4 digit dates and 1900 is subtracted from the date to generate the form (1981 - 1900 = 81) so that the form can look like 1981 when it is generated. This will cause a problem since 2001 - 1900 = 101 instead of 01. In other cases where a 6 digit date was used, the problem is even worse since there is no clear indication of which date we are talking with. Imagine COBOL program that deals with county records to record births and deaths. If all the dates are stored as 6 digits soon you will have records which say something like 09/03/63. Now suppose, I live to be a hundred years old, my birth is recorded as 09/03/63 and if I die on my birthday 100 years later my death would also be 09/03/63. A casual observer might interpret this as me dying at birth or who knows what.

    Thus, the main problem of Y2K is the problem of incorrect results when date mathematics are conducted. Most companies are working to correct these problems in their COBOL programs and most current microcomputer applications already have built in fixes.

  2. The second type of problem involves systems that check the date for some purpose to determine if a valid date is being used. An example might be a credit card expiration date. If the program that checks this when the card is scanned is very simple it might just say is today greater than the expiration date. Thus, 01/01/99 is greater than 01/01/00 which would result in your credit card being rejected. Another example is a security system which checks to see if today is a valid date before recording an entry or exit from a building. If the 00 date is determined to be out of range or the computation is at fault the system may simply shut down and lock all the doors.


Why did Programmers Do This?

Essentially, several reasons exist for this problem:

  1. Saving Space in computer memory. Originally, computers had very small amounts of memory available and the repeated use of two extra numbers could make a significant difference on the amount of memory available so in the interests of efficiency, the seemingly redundant thousands and hundreds were dropped.

  2. Preprinted forms. Designing computer output for old systems was quite tedious and required that every variable be specifically defined. In order to make it easy to print a two digit year after a preprinted 19 it was simpler to use two digit years in the program.

  3. Unexpected Longevity. Since the year 2000 was a very distant date most people didn't really think about this problem until recently. Thus, a lot of programs were written in the traditional manner of using 2 digit years on the date.


What is COBOL and why does it exist?

COBOL is a computer programming language developed by the CODASYL committee (Conference on Data Systems Languages) in 1959. COBOL became the business programming language of choice for large scale applications throughout the 60's 70's and 80's. Millions and millions of lines of COBOL programs were written and these systems (often called legacy systems) are still in use today since it is expensive and difficult to replace an accounting system or payroll system in a large corporation. The old adage, "If it ain't broke, don't fix it" has also played a roll in the continuation of COBOL as a programming language nearly 40 years after its original inception.

Where is the problem?

Any computer program which deals with dates is susceptible to this problem. Thus, if you use dates in any of your applications at home or work, you should make sure the applications you are using or the programs you are writing are compliant with 8 digit dates or have some other mechanism built in to deal with the year 2000. If you fail to do this your business may suddenly find all of its records our of order or important information could be lost due to problems dealing with data that is out of range.

Will this problem dramatically affect my life?

Not likely, most companies are taking steps to deal with this problem. There will likely be isolated incidences of problems (like a credit card rejected) that will quickly be identified and corrected by the institution. At home, if you make sure all of your applications and programs utilize 8 digit dates then you should experience no problems with your personal applications.

What are Logic Devices [PLD]?

Logic devices and programmable logic devices are technical terms used to refer to the many semiconducter based "chips" that are used to manage various devices (anything from a simple coffee maker to a giant production machine). These devices are usually programmed using Assembler programming language and it is estimated that literally 10s of billions of these things exist around the world.

Why are people concerned about PLDs in conjunction with Y2K?

Many people believe that a large number of devices that utilize PLDS will fail when the year 2000 rolls around since PLDS may contain date sensitive code. In particular programmable devices like VCRS, Coffee Makers, Security Systems, etc. are susceptable to this type of problem. If the PLD is date sensitive and was not set up to deal with 8 digit dates (discussed earlier), then a number of different things may happen, 1) the device may simply fail to operate; 2) the device may report the incorrect day of the week (if it thinks the year is 1900); 3) The device may fail to operate as expected (coffee maker doesn't come on in the morning). Thus, there is the potential for a lot of problems with this type of thing but I don't think any of it is earth shattering (although if my coffee maker stops working there is going to be a serious problem).

The other side of this coin is that PLD devices are used in large production systems that manage things like power plants and food processing machinery (literally everything these days has a PLD in it somewhere). Many speculate that electricity will fail and all sorts of problems will ensue. My thought is that if the power company is not producing electricity then it is not making any money. While I have not worked in the power industry, my feeling is that they are testing these systems and making corrections so again, there may be some isolated power outages, but as soon as the power fails they can start repairing that system.

What can I do about PLDs?

Well, the easiest thing to do is to set the dates on the various devices in your house that are programmable (security system, coffee maker, etc.) to dates after the year 2000 and see what happens. If any problems ensue then you can figure out what to do next (contact the manufacturer or replace the device). Mostly I would check out your mission critical systems. I checked out the coffee maker and the security system and both worked fine.


How to be sure:

Assess your personal work. Are there applications or programs that use dates in computation or for reference purposes? If you have such applications you may want to investigate to determine if those applications and programs use 6 or 8 digit dates. If you are using 6 digit dates, then you should convert them to 8 digit dates or at least test the application to determine if there is a problem (try entering some dates in the future). Be sure and back up your original files before you try any of this.


Additional Information

There are a great many web sites and consulting firms dedicated to solving this problem commercially. Here are two links:

  1. http://www.firstsql.com/year2000/

  2. http://www.sba.gov/y2k/

In addition, if your small business or community organization is interested in a presentation on the Y2K problem and its impacts feel free to contact doug.white@acm.org.


98-07-12 / Alan Rea

http://unix.cc.wmich.edu/rea/Y2K/FAQ.html