The following Y2K material has been kept available by MITRE for historical purposes only and has not been updated unless noted.
MITRE - Y2K - Y2K Safe Questions
Y2K Safe Questions
Many people pursuing the solutions to the Government's Year 2000 date problems
desire compliance assurances from the products used in those software systems.
This assurance is generally taking the form of a legalistic statement of
compliance. The trouble with this approach is two-fold: (1) what is meant
by compliance varies and/or is so all encompassing that no vendor can agree
to the definition, and (2) winning in the courts will not help us if and
when the systems fail.
Does the product correctly handle leap years (all 3 rules)?
If the year is divisible by 4, it is a leap year, UNLESS
The year is also divisible by 100, then it's not a leap year, UNLESS
The year is also divisible by 400, then it is a leap year
How does the product store dates internally, and for what period of
time? Is it with an offset from a base year? What is the increment of time
counted (seconds, minutes, hours, days, weeks, months, ...)? How big is
the offset (8-bit, 16-bit, 32-bit, 64-bit, ...)?
Does the product support 2- and 4-digit years for input and output?
How are dates used internally? How many year digits are used for internal
date values?
Does the product contain any logic that assigns/uses "special
values" of date fields (99, 98, 00, 9/9/99, 1/1/11, 19, 20, ...)?
By examining behaviors of a product along these dimensions we can determine
whether a product is "safe" to use for any particular situation
and then take and/or request corrections to specific behaviors, rather than
a blanket statement of "make it compliant" or "make it work
in all situations".
The following questionnaire is a sample set of questions we are using to
discuss date issues with Commercial Off-the-Shelf (COTS) and Government Off-the-Shelf (GOTS) suppliers. So far our discussions have been well received and the information useful.
The following questions should be used to gain an understanding of the COTS and/or GOTS components of systems.
For the Product:
Are there any date fields used by the product?
Are those date fields 2 or 4 digits?
Does it accept any dates directly from the user?
How does the user specify the year?
How does the product calculate leap years?
Are all three rules used?
If the year is divisible by 4, it is a leap year, UNLESS
The year is also divisible by 100, then it's not a leap year,
UNLESS
The year is also divisible by 400, then it is a leap year
Are dates stored internally as a specific "date" data type?
Is this done using a base year with an offset of the number of seconds/
minutes/hours/days/weeks since that base date?
What size is the data type that is used to store the offset?
Is it an 8-bit, 16-bit, 32-bit, 64-bit, ...?
Is there a valid date range (including restrictions due to overflows)?
Are two-digit years allowed/used for input, internal processing, data
storage, and/or output?
If so, how are they manipulated/used for:
Comparisons
Are any date validation checks performed?
How are non-continuous timelines handled?
What happens if current time < previous time? Does it ignore
data?
Calculations
How are periods greater than 100 years handled?
Sorting
File system/tape system tags
Are any special values for date fields used?
00
0/00/00
1/11/11
99
98
9/9/99
19
20
Does the product directly import or export date data to any other
application and/or system?
If so, can these applications and/or systems handle:
Leap year, 2 digit dates, and dates after 2000?
Does the product rely on the date for licensing?
When will solutions for any identified date-related problems be made
available?
In what version will the changes occur?
Will this update be available at no charge?
How will the update be distributed?
Will a maintenance contract be required?
Will it be supplied to registered users?
Will the users need to purchase an upgrade?
Will the users need to purchase a new copy of the product?
For further information directly related to Year 2000 issues, please contact Year2000@mitre.org