Y2K Site Map | Terms of Use | Problem | Steps | Certification | Briefings | Compliance | Solutions | BIOS | Test & Evaluation | Cost


The following Y2K material has been kept available by MITRE for historical purposes only and has not been updated unless noted.

MITRE - Y2K - GTE Criteria
Proposed Criteria for "Century Compliance"


For the most recent version of this document dated 1996-09-24 (in PDF format only), please see GTE's website.


DISCLAIMER

This working technical document was prepared solely for the internal use of GTE Corporation and affiliated GTE companies (GTE). GTE EXPRESSLY DISCLAIMS ANY RESPONSIBILITY FOR THE ACCURACY OR COMPLETENESS OF THE CONTENTS OF THIS DOCUMENT WHICH IS PUBLISHED "AS IS." GTE FURTHER DISCLAIMS ALL EXPRESS OR IMPLIED WARRANTIES OF ANY KIND, INCLUDING WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR WARRANTY OF MERCHANTABILITY. Reliance on or use of the information contained herein shall be at the user's sole risk. GTE shall not be held liable for any damages of any kind including direct, consequential or special damages which may arise out of or result from reliance on or use of the information in this document. This document is copyrighted by GTE Government Systems Corporation.


Copyright 1995, 1996 GTE Government Systems Corporation.

PA96014

Revised 1996-06-19



GTE Technology & Systems

Technology Program Office

Waltham, MA 02254

Proposed Criteria for "Century Compliance"

Summary

This paper presents proposed criteria for "century compliance." It first provides information regarding the scope of the Year 2000 (Y2K) challenge and then identifies and discusses four suggested criteria for consideration in assessing century compliance.

A term commonly used in industry is "year 2000 compliant." Inherent in this term is an important but narrow focus on the year 2000 deadline and the problems associated with that single event. In contrast, this paper uses the term, "century compliant," to emphasize the broader character of the Y2K challenge.

The philosophy underlying this paper considers that compliance involves business and technical considerations. Accordingly, century compliance requires a balance between cost and minimizing the technical risks in the solution.

This paper replaces all previous versions.


Background of the Y2K Challenge

Widespread understanding of the Year 2000 (Y2K) challenge is an emerging phenomenon. While technologists understand the many intricacies in how computer software handles dates, explanations in the media and elsewhere tend to simplify the problem for brevity.

Descriptions of the Y2K phenomenon are typically straightforward. Software commonly carries only the lower two digits for each year and, as a result, ignores century when manipulating dates. Once software begins mixing dates in both the 19xx and 20xx ranges, errors of varying degrees can result. In some cases, the software may fail immediately without completing its operation. In others, the software may continue to produce erroneous output, which can remain unnoticed.


Essence of the Challenge

There has been extensive examination of the Y2K challenge and ways to address it. These include but are not limited to:

While examining various aspects of this subject is vital, the considerations discussed above are actually elements of the solution--not the problem. Technical experts tend to talk about what changes are needed in how software handles and stores date data. Program managers tend to talk about planning, estimation, and inventory. Higher-level managers tend to talk about the cost and the diversion of resources. Each person struggling with the Y2K challenge tends to focus on that part of the solution uppermost in his or her mind.

The first step in addressing the Y2K challenge is to identify the business considerations which include:

  1. Eliminating century risk. In reality, this risk can only be eliminated for a period of time--the longer the period, the greater the cost.
  2. Preserving current operations. Changes to achieve compliance should have minimal affect on the cost and efficiencies of current operations.
  3. Minimizing conversion burden. The company must minimize resources diverted to the Y2K effort.

Compliance is a balance between lower cost and lower risk. Table 1 lists seven measurements that more fully characterize the business and technical needs that should be considered in developing a Y2K program.

The challenge in defining compliance is to enable implementation plans that address the business needs while satisfying the following considerations:

This paper attempts to encourage solutions that minimize Y2K risk while minimizing the cost of Y2K conversion.


Technical Elements of the Y2K Challenge

The technical component of the Y2K challenge revolves around accurately accepting, creating, manipulating, and outputting calendar-related data. The largest concern is whether software can handle the date roll-over to the year 2000. This date change constitutes a high-risk event that conversion efforts should mitigate.

MeasurementDescription
Time to Next Y2K Event (TNYE) Also called the "event horizon." Numerous events associated the Y2K challenge can occur at any time. Y2K conversions cannot eliminate these events for all time but can keep the next one from occurring until many decades into the future. In general, Y2K conversions will increase this margin in some rough proportion to the cost of the conversion. The balancing of cost and technical approach should maximize the value for TNYE.
Incremental Complexity Software complexity can be measured using several methods. Some approaches in Y2K conversion will increase this complexity and consequently reduce maintainability and reliability. Trade-off should minimize software complexity.
Delta Cost Performance Each system has a predictable cost for operation and maintenance. Some approaches to Y2K conversion tend to increase these costs (for permanent storage for example). The balancing of cost and technical approach should minimize the average cost per month.
Delta Technical Performance Technical performance measures such as throughput and turnaround may suffer with some approaches to Y2K conversion. Trade-off should minimize (e.g., turnaround) or maximize (e.g., throughput) each performance measure as appropriate.
Delta Conversion Cost Approaches to the Y2K challenge vary in cost. Regardless of incremental benefit, there are limits to affordability. The balancing of cost and technical approach should minimize this cost to the extent feasible.
Delta Conversion Schedule Approaches to the Y2K challenge vary in duration. Regardless of incremental benefit, some approaches may not be completed before the first Y2K event. Trade-off should minimize this schedule.
Delta Conversion Risk The risk of slipping schedule or overrunning cost for an organization's entire Y2K program is a measure of the organization's probability of survival. Each approach to Y2K conversion includes risks. The level of testing is one critical consideration in analyzing the risks of each approach. Trade-off should minimize the value for risk exposure. (Risk exposure is risk probability times potential cost.)

Table 1. Measurements Characterizing the Trade-Offs to Achieve Century Compliance


Century compliance, however, is larger than the roll-over to 2000. There are several other risk areas whose events are associated with the Y2K challenge. These events can occur not only at the roll-over to 2000 but well before and well after. Table 2 enumerates the various elements of the Y2K technical issue and examples of events associated with them. It is important to understand that alternatives for addressing each element share considerable overlap.

ElementDescription Example eventProbable timing
Century ambiguity This is the most common element. Software represents dates with a 1- or 2-digit year. When software does not recognize that dates are not all in the 19xx range, the results are undesirable. Examples: Examples of century ambiguity can appear in the following events: Examples of events can occur with timing as early as:
a. Data edits reject years in early 20xx as invalid. a. Bank ATM rejects an other-wise valid bank or credit card with an expiration date of "00". a. First use of cards issued in 1995.
b. User interface does not allow 4-digit year to clarify century. b. Lotus 1-2-3 accepts only 2-digit years which it assumes to be in 19xx only. b. First need to enter values later than 1999. Has already occurred.
c. Sorting leaves dates in 20xx and 19xx in jumbled order. c. Itemized monthly bill lists transaction for Jan 1, 2000 through Jan 15, 2000 followed by Dec., 19, 1999 through Dec., 31, 1999. c. First monthly data processing in 2000.
d. Durations such as invoice aging are calculated incorrectly. d. Invoice age calculated as ridiculously large number or as negative number, erroneously triggering overdue notices and staggering interest penalties. d. January, 2000.
e. The century is truncated or changed between entering and retrieving a date. e. Software stores dates in the 20xx range using DMBS but only passes 2-digit years to the product. DBMS defaults to 19xx and stores. e. Could happen in 1996 for systems with 5-year time horizon.
f. Comparing a date in 19xx with a date in 20xx assumes both are in 19xx. f. Payroll-deduction calculations for years in 20xx incorrectly mistake the year as 19xx and fail to apply recent changes in tax laws. f. First quarter of 2000.

Table 2. Technical Elements of the Y2K Challenge


Criteria for Century Compliance

This proposal for century compliance requires that software satisfy four, date-related criteria. Software meeting all four can be considered "century-compliant." These criteria are listed in Table 3.

Element DescriptionExample event Probable timing
Extended semantics In general, specific values for a date field are reserved for special interpretation. The most common example is interpreting "99" in a 2-digit year field as an indefinite end date, i.e., "does not expire." Another is embedding a date value in a non-date data element. Some software may erroneously process a transaction with a valid end date in 1999-such as not terminating an expired software license or failing to age back-up tapes for recycling as scratch tapes. Will occur on various days after Dec. 31, 1998.
Calendar errors Errors typically include failing to treat 2000 as a leap year and converting incorrectly between date representations. Logic sensitive to day-of-week will be one day off after February 28, 2000. Calculating day of week for all dates following this will be incorrect. Will occur the first time input data contains Feb. 29, 2000. Will occur on this leap day.
Date overflow Many software products represent dates internally as a base date/time plus an offset in days, seconds, or microseconds since that base date/time. Hardware integers holding the offset value can overflow past the maximum corresponding date-an event which may lead to undefined behaviors. Value for date can revert to a date near the base date/time, to a negative value, or crash the software because of an illegal operation. Happened in the 1980s on certain Tandem hosts. Could happen again at any time to any product depending on how product stores dates.
Inconsistent semantics At interface between systems, software on each side assumes semantics of data passed. Software must make same century assumptions about 2-digit years. Software on one side assumes all dates in 19xx. Software on other side assumes years 51-99 are 19xx, and 00-50 are 20xx. Could happen in 1996 for software that stores date values 5 or more years into the future.

Table 2. Technical Elements of the Y2K Challenge (Concluded)


Each criterion serves as a high-level requirement for software. The following discussion elaborates on each:

CriterionDescription
General integrity No value for current date will cause interruptions in normal operation.
Date integrity All manipulations of calendar-related data (dates, durations, days of week, etc.) will produce desired results for all valid date values within the application domain.
Explicit century Date elements in interfaces and data storage permit specifying century to eliminate date ambiguity.
Implicit century For any date element represented without century, the correct century is unambiguous for all manipulations involving that element.

Table 3. Four Criteria for "Century Compliance"


Although the four criteria fully define century compliance, compliance represents a balance between cost and risk rather than an absolute "yardstick." Such a balance will vary with each organization according to its business needs and its technological base. Consequently, an organization will require a greater level of detail to interpret how these criteria apply to the organization. An interpretation documented and distributed can assure that "century compliance" is interpreted consistently across the organization.

CategoryExamples of manipulation
Arithmetic
  • Calculate the duration between two dates
  • Calculate date based on starting date and duration
  • Calculate day of week, day within year, week within year
Branching
  • Compare two dates
Format
  • Convert between date representation (YMD, Julian, etc.)
  • Reference same data address with different variables
Data storage
  • Storing and retrieving
  • Sorting and merging
  • Searching
  • Indexing on disk file or database table
  • Moving data within primary memory
Extended semantics
  • "99" as special value for year
  • "99.365" as special value for Julian date
  • "00" as special value for year

Table 4. Variety of Manipulation of Date Data


Table 5 contains an interpretation of the criteria as an example. Note the importance of clearly identifying the calendar by name, the specific date ranges for compliance relevant to the organization, reasonable latitude in date format, and situations under which implicit century values will be tolerated. Also note that certain exceptions are included to support important options for optimal cost/risk trade-off.

Standardizing the format for date data is an important part of century compliance. The example in Table 5 uses the ANSI X3.30 standard for date representation. For systems with interfaces to foreign entities or U.S. government agencies, the equivalent ISO and FIPS standards may be used instead. There are two very important considerations with requiring conformance to an industry standard:

  1. Limitations in standards. None of the three standards (ANSI, ISO, and FIPS) for date representation mandates a 4-digit year for all calendar data. For example, conformance to ANSI X3.30 does not eliminate century ambiguity from all date variables and interfaces. Instead, conformance simply reduces the variety of formats occurring within software and data.
  2. Accommodating conflicts. While trying to conform to ANSI X3.30, some applications may need to satisfy other standards or conventions for date representation. Table 6 lists examples of standards with date representations that may supersede ANSI X3.30 in specific applications.

Criterion Description of criterion Interpretation of criterion
General integrity No value for current date will cause interruptions in normal operation.
  • All software on all platforms will function correctly for all values of system date between 1985-01-01 and 2035-12-31.
  • Of special interest are the following dates and the ability to roll over to the correct next date:
  • 1998-12-31, 1999-09-09, 1999-12-31, 2000-01-01, 2000-02-28, 2000-02-29, 2000-03-01, 2000-12-31, 2001-01-01, 2027-12-31
Date integrity All manipulations of calendar-related data (dates, durations, days of week, etc.) will produce desired results for all valid date values within the application domain.
  • All date values and calculations are based on the Gregorian calendar as defined in Encyclopædia Britannica, 15th edition, 1994, p. 430p.
  • Computing assets must correctly handle all representation and manipulation of dates with values between 1900-01-01 and 2050-12-31. Especially important is that all years in this 150-year range divisible by 4 are leap years except 1900.
  • All software developed for GTE must initialize all date elements with either all zeros (0000-00-00) or null values. Null values are defined for each application by the development facilities, such as language compiler. A null-value feature is strongly recommended in third-party-software selection.
  • All developed software must not contain literals or constants for dates unless required to capture specific business rules such as calculations of payroll deductions.
  • All developed software must not use special date values as logical flags, such as "99" as year to mean "no end date" or "00" to mean "does not apply."

Exceptions:

  • Valid date ranges in existing developed or existing third-party software may start with the oldest date value in the application's archived data rather than with 1900-01-01 when there is no business need to support earlier dates.

Table 5. A GTE Interpretive Example of Century-Compliance Criteria


Criterion Description of criterion Interpretation of criterion
Explicit century Date elements in interfaces and data storage permit specifying century to eliminate date ambiguity.
  • All developed and third-party software must permit the use of date formats which explicitly specify century in all date data stored or transmitted. The format of these date elements must be YYYYMMDD or YYYYJJJ as specified by ANSI X3.30-1985(R1991) unless superseded by another application-specific standard or convention.
  • In storing or transmitting date data, some applications must conform to domain-specific standards, contractual agreements, or APIs to necessary third-party products whose date formats must supersede ANSI X3.30 as appropriate within the application. Examples of these standards are listed in Table 6.
  • Third-party products must permit formatting data with explicit century in the user interface.
  • All developed applications using third-party products must always explicitly supply century and never rely on those products' default value for century.

Exceptions:

  • For date data formatted for a user interface, it is acceptable to use punctuation (slash, hyphen, period, comma) within a formatted date, to spell out or abbreviate the name of the month, or to reorder year-month-day to serve customs among the end-users.
  • DBMSs which cannot store date in conformance with SQL standards but do store century explicitly (such as "DD-mmm-YYYY") are acceptable.
  • Default values for century are permitted only when supplied by data-entry aids and the end-user can verify the defaulted value before committing the data.
Implicit century For any date element represented without century, the correct century is unambiguous for all manipulations involving that element.
  • Century must be explicit in all date data stored or transmitted unless the correct century can be inferred with 100% accuracy based on the value for date. Explicit century is preferred where practical.
  • Developed and third-party software may imply century in the user interface in the format, YYMMDD or YYJJJ (as specified by ANSI X3.30).
  • In storing or transmitting date data, some applications must conform to domain-specific standards whose requirements for dates may supersede ANSI X3.30 as appropriate within the application. Examples of these standards are listed in Table 6.

Exceptions:

  • For date data formatted for a user interface, it is acceptable to use punctuation such as slash within a formatted date, to spell out or abbreviate the name of the month, or to reorder year-month-day to serve customs among the end-users.

Table 5. A GTE Interpretive Example of Century-Compliance Criteria (Concluded)


DomainStandard
Federal or DOD procurements FIPS-4-1 (Revised 1996-03-25)
Interoperability with international concerns ISO 8601 (1988)
SQLANSI X3.135-1992, ISO-IEC 9075:1992, or FIPS 127-2
Exchange of call-billing data Bellcore SR-STS-00320 (EMI)
Call Data RecordsSwitch mfgs' proprietary formats
Credit cards, debit cards, ATM cards ISO-IEC 7813, ISO 4909
Electronic commerce (EDI) ASC X12 EDI draft std for trial use, ISO 9735, UN/EDIFACT

Table 6. Examples of Standards Which May Supersede ANSI X3.30 for Formatting Date Data


Applying the Criteria

The detail in Tables 5 and 6 can be applied throughout an organization. Century compliance should become both a standard in normal business operations and a fundamental specification for Y2K programs.

The following activities should adopt these criteria as a standards in day-to-day business:

Compliance criteria are the most important concept in a Y2K program. All other goals, decisions, and plans must revolve around a common understanding of compliance. The compliance criteria in this paper are relevant in the following tasks of a Y2K program:


Application to Impact Analysis and Testing

Testing against the century-compliance criteria falls into the following three categories:

  1. General. Some aspects of century compliance are independent of technology and application domain. For example, Jan. 1, 2000 follows Dec. 31, 1999 for all hardware and software.
  2. Technology-specific. Some aspects of century compliance depend on the technology and the behaviors and features of that technology. For example, not all software performs all the date manipulations listed in Table 4.
  3. Domain-specific. Some aspects of century compliance depend on the requirements of a specific application. For example, the valid ranges for dates to be tested can vary with each application.

Table 7 is a high-level guide for test cases to consider in each category. Testing should be organized by category to permit reusing test procedures among different applications.

CategorySub-category Guidelines
General Current date
  • Direct set, power-up roll-over
  • Re-initialize from cold start
  • Full date ranges
Calendar accuracy
  • Days of week in 2000 and 2001
  • Leap year in 2000
  • 366 days in 2000
Century ambiguity
  • High-risk values (1999-12-31, 1900-01-01, 2000-01-01, 2000-02-29)
  • Ambiguous century in user interface
  • Electronic interfaces (API such as O/S call for system date, etc.)
Technology-specific Current date
  • Power-down continuity
  • "System date" versus "current date"
Date representation
  • Overflow of base-and-offset representation
  • Standards for Gregorian formats
  • Century capability in storage and interfaces
Date manipulation
  • Date arithmetic
  • Conversion between representations
  • Sorting, searching, indexing
  • Century designation available in storage and interfaces
Domain-specific Century ambiguity
  • Accuracy in inferring century for each field in storage, user interface, and other interfaces.
Date representation
  • Industry standards and contract requirements
  • Human-factors requirements
  • Design and coding standards
Date manipulation
  • Access to archived data
  • Manipulation of archived data
  • Extended semantics

Table 7. High-Level Guidelines for Test Cases in Y2K Test Procedures


Recommendations

Century compliance as specified in Tables 3, 5, and 6 is based on the philosophy that the Y2K challenge must be viewed as not only a technical but a business issue. The spirit of compliance is to eliminate technical risks in computing assets through cost-effective solutions.


Figure 1. Analysis of Data Fields as Guided by Century-Compliance Criteria

Therefore, if there are several conversion options with acceptable cost and schedule, it is recommended not simply to select the least-cost among them but the one option that most closely attains all the following objectives.


Summary

The Y2K challenge is a very urgent matter. Responding to the challenge without some analytical discipline in the front-end work could impede achieving timely and cost-effective century compliance. Each organization should begin its Y2K program with clearly articulated criteria for century compliance and then use these criteria to guide the planning and execution of all activities.


APPENDIX A

Guidelines for Testing Century Compliance of a Commercial Telephone Switch


Compliance criterion Guidelines for impact analysis
General integrity
  • System date on switch can be set to high-risk dates:
    • 1999-09-09, 1999-12-31, 2000-01-01, 2000-02-29
  • Re-initialize from cold start on high-risk dates:
    • 1999-09-09, 1999-12-31, 2000-01-01, 2000-02-29
  • System date rolls over correctly on high-risk dates:
    • 1998-12-31 -> 1999-01-01
    • 1999-12-31 -> 2000-01-01
    • 2000-02-28 -> 2000-02-29
    • 2000-02-29 -> 2000-03-01
Date integrity
  • Do date-sensitive services for system dates behave correctly in 19xx and 20xx?
    • Date-sensitive includes specific dates, days of week, and durations.
    • Services such as call-back, 800 routing, voice-mail operator
  • What is highest possible value switch can represent for system date?
  • System date correctly used in time-stamps for high-risk dates
    • High risk dates: 1998-12-31, 1999-01-01, 1999-12-31, 2000-01-01, 2000-02-28, 2000-02-29, 2000-03-01
    • Time stamps in call-data records, track and performance reports, data saved on hard-disk
Explicit century
  • Can date-sensitive services be set and used successfully for dates in 20xx?
  • Are there 1- and 2-digit years not covered by Bellcore standard?
Implicit century
  • Are there any date fields in any interface that contain a year?
  • Could these be misinterpreted by either side of interface for dates in 20xx?


Guidelines for Testing Century Compliance of an Operating System


Compliance criterion Guidelines for impact analysis
General integrity
  • System date can be set to high-risk dates:
    • 1999-09-09, 1999-12-31, 2000-01-01, 2000-02-29
  • Re-initialize from cold start on high-risk dates:
    • 1999-09-09, 1999-12-31, 2000-01-01, 2000-02-29
  • System date rolls over correctly on high-risk dates:
    • 1998-12-31 -> 1999-01-01
    • 1999-12-31 -> 2000-01-01
    • 2000-02-28 -> 2000-02-29
    • 2000-02-29 -> 2000-03-01
  • Does system date roll over correctly in both powered-up and powered-down states?
Date integrity
  • Do date-sensitive functions for system dates behave correctly in 19xx and 20xx?
    • Date-sensitive refers to functions whose behavior can start or stop on a specified date, on a specified day of the week, or after a specified elapsed time.
    • Functions such as job scheduling, accounting, admin functions, any interactive command with dates in parameters or switches (especially disk and tape commands and utilities), setting or obtaining system date through system call, reporting system data with dates in it.
  • What is highest possible value switch can represent for system date?
  • System date appears correctly used in time-stamps for high-risk dates
    • High risk dates: 1999-01-01, 1999-12-31, 2000-01-01, 2000-02-28, 2000-02-29, 2000-03-01
    • Time stamps in queue entries, volume directories, inter-process communication, off-host communication.
Explicit century
  • Can century be explicitly entered or displayed in date-sensitive functions?
  • Are there functions or system calls which cannot permit an explicit century and whose format is governed by an industry standard or customer requirement?
Implicit century
  • Could the century in any date value in any date-sensitive function be misinterpreted for dates between 1985-01-01 and 2050-12-01?


Guidelines for Testing Century Compliance of a Compiler, Assembler, or Interpreter


Compliance criterion Guidelines for impact analysis
General integrity
  • Does language provide a function to obtain or set system date on the host or through a time service?
  • Does this function return the correct value for system date for high-risk dates:
    • 1999-09-09, 1999-12-31, 2000-01-01, 2000-02-29
  • Does this function return the correct value for system date after the system date rolls over on high-risk dates:
    • 1998-12-31 -> 1999-01-01
    • 1999-12-31 -> 2000-01-01
    • 2000-02-28 -> 2000-02-29
    • 2000-02-29 -> 2000-03-01
Date integrity
  • Does language support a data type for date values in the range 1900-01-01 to 2050-12-31?
    • Do the language routines treat 2000 as a leap year and 1900 as a non-leap year?
    • Does the date arithmetic correctly calculate differences between dates, add dates and durations, compute date of week?
    • Do the language routines correctly convert between date representations (YMD to Julian to base-and-offset )?
    • Does the language correctly compare dates?
  • Does language work with library of date routines? If so, does library perform correctly per questions in previous bullet?
  • Does system include sort/merge utility? If so, does sorting or merging on a date field produce correct sequence across dates in 19xx and 20xx?
Explicit century
  • Does date data type provide for explicit values for century?
  • Are there functions or system calls which cannot permit an explicit century, and whose format is governed by an industry standard or customer requirement?
Implicit century
  • Does date data type support formats without explicit century?
  • If value for century not explicitly set, what value is assumed in date comparisons, arithmetic, permanent storage, etc.?
  • Is century correctly inferred in all cases where century is not explicit.


Guidelines for Testing Century Compliance of a Database Management System (DBMS)


Compliance criterion Guidelines for impact analysis
General integrity
  • Does language provide a function to obtain the system date on the host or through a time service?
  • Does this function return the correct value for system date for high-risk dates:
    • 1999-09-09, 1999-12-31, 2000-01-01, 2000-02-29
  • Does this function return the correct value for system date after the system date rolls over on high-risk dates:
    • 1998-12-31 -> 1999-01-01
    • 1999-12-31 -> 2000-01-01
    • 2000-02-28 -> 2000-02-29
    • 2000-02-29 -> 2000-03-01
Date integrity
  • Does language support a data type for date values in the range 1900-01-01 to 2050-12-31?
  • Do the language routines treat 2000 as a leap year and 1900 as a non-leap year?
  • Does the date arithmetic correctly calculate differences between dates, add dates and durations, compute date of week?
  • Do the language routines correctly convert between date representations (YMD to Julian to base-and-offset internal)?
  • Does the language correctly compare dates?
  • Does a key index which includes a date field produce correct sequence across dates in 19xx and 20xx?
  • Does DBMS retrieve dates accurately for values in the range 1900-01-01 to 2050-12-31?
Explicit century
  • Does date data type permit setting explicit values for century?
  • Do retrieval functions permit formatting dates with explicit century?
  • Does DBMS retrieve date values accurately for values in the range 1900-01-01 to 2050-12-31?
Implicit century
  • Does date data type provide for data types without explicit century?
  • If value for century not explicitly set, what value is assumed in setting date field to a value, date comparisons, date arithmetic, etc.?


Guidelines for Testing Century Compliance of a Local-Area Network (LAN)


Compliance criterion Guidelines for impact analysis
General integrity
  • Does client network software obtain correct system date from the host for high-risk dates:
    • 1999-09-09, 1999-12-31, 2000-01-01, 2000-02-29
  • Does server network software obtain correct system date from the host for high-risk dates:
    • 1999-09-09, 1999-12-31, 2000-01-01, 2000-02-29
  • Does network-administration software obtain correct system date from the host for high-risk dates:
    • 1999-09-09, 1999-12-31, 2000-01-01, 2000-02-29
  • Does this function return the correct value for system date after the system date rolls over on high-risk dates:
    • 1998-12-31 -> 1999-01-01
    • 1999-12-31 -> 2000-01-01
    • 2000-02-28 -> 2000-02-29
    • 2000-02-29 -> 2000-03-01
  • Does LAN software accept and set time stamps correctly in the range 1985-01-01 to 2035-12-31?
Date integrity
  • Does admin software support expiration dates for user accounts, passwords?
    • Does calendar logic treat 2000 as a leap year and 1900 and a non-leap year?
    • Does the date arithmetic correctly calculate differences between dates, add dates and durations, compute date of week?
    • Do the language routines correctly convert between date representations (YMD to Julian to base-and-offset internal)?
    • Does the language correctly compare dates?
  • Do the network-admin software and API to network software accurately accept and retrieve all date fields in the range of values, 1900-01-01 to 2050-12-31?
Explicit century
  • Do time stamps provide for explicit values of century?
  • Does user interface in net administration software permit explicit entry and display of century in all date fields?
  • Does API to network software permit explicit entry and retrieval of century in all date fields?
Implicit century
  • For time stamps without explicit century, is a value for century inferred correctly for any manipulations of time stamps?
  • For date fields in user interface of admin software, which value for century is assumed if not entered?
  • For date fields in API, which value for century is assumed if application does not set it?


Guidelines for Testing Century Compliance of a Custom Application


Compliance criterion Guidelines for impact analysis
General integrity
  • Does language provide a function to obtain the system date on the host or through a time service?
  • Does this function return the correct value for system date for high-risk dates:
    • 1999-09-09, 1999-12-31, 2000-01-01, 2000-02-29
  • Does this function return the correct value for system date after the system date rolls over on high-risk dates:
    • 1998-12-31 -> 1999-01-01
    • 1999-12-31 -> 2000-01-01
    • 2000-02-28 -> 2000-02-29
    • 2000-02-29 -> 2000-03-01
  • Are there third-party products embedded in this application? Are all these products century-compliant?
  • Does the application code ignore values for explicit century in the system date at any point in the program logic?




Date integrity
  • Does the programming language support a data type for date values in the range 1900-01-01 to 2050-12-31?
  • Does the application make a leap-year calculation? Do these calculations treat 2000 as a leap year and 1900 as a non-leap year?
  • Does the date arithmetic correctly calculate durations (differences) between dates, add dates and durations, compute date of week?
  • Does the application convert date values from one representation to another (for example, YMD to Julian to base-and-offset internal)? Does software correctly convert between date representations according to the Gregorian calendar?
  • Does the application compare dates in any of its branching logic or calculation of boolean values? Do all these comparisons produce correct results for all combinations of values with the expected ranges for dates?
  • Does the application include searching, sorting, merging, or indexing on internal tables, linked lists, or other data structures based on date variables? Do these operations perform correctly for all possible values for date in the key variables? Does a key index which includes a date field produce correct sequence across dates in 19xx and 20xx?
  • Does the application represent date in any variable as an offset from a base date/time? What is the maximum value for date for this representation? What is the minimum value for date for this representation (usually the base date)? Does the expected range of values for each variable using this date representation fall within these extremes?
  • Does the application use application assign values for date from one variable to another? Is the century portion of the value truncated during any assignment? Is the value in the target variable eventually used in a date manipulation which requires explicit century for correct results?
  • Does the application use language features which map a data address to more than one variable (such as REDEFINEs in COBOL or COMMON in FORTRAN)? In all aliases for the same data space, does any variable ignore or truncate a value for explicit century in the date value? Is the truncated value for date eventually used in a manipulation which assumes that all values for date share the same century?
  • Are constants for date values (including day, month, or year) used in any manipulation? Is the date constant intrinsic to the functional requirements or a special value used in a "date" data type for convenience?
  • Does the application store and retrieve dates accurately for values in the range 1900-01-01 to 2050-12-31?
  • Does the application use sort/merge utilities to order file contents on date fields or use indexed file structures keyed on date fields? Is this order correct for all values of date in the range 1900-01-01 to 2050-12-31?
  • Does the application rely on primary or alternate indices on a structured database for search, insert, update, or delete in which any key contains a date field? Will the index order be correct for all values for date in the range 1900-01-01 to 2050-12-31?
  • Are all date variables initialized to some convention for null value?


Guidelines for Testing Century Compliance of a Custom Application (Concluded)


Explicit century
  • Does the application use a language, toolkit, and/or application generator which permits explicit century in the date data types? If so, are values for century in variables of these types supplied from external input or derived within the software logic?
  • Does the application use a DBMS or other layered (or horizontal) software product for data persistence to store and retrieve date variables? If so, can these products support explicit values for century in any date variable stored and retrieved?
  • Does the application have external interfaces (I/O, APIs, external subprogram calls, IPCs, library routines, HMI) which contains a date variable with explicit century? Does the software ignore, truncate, or write over the century value in any such variable as it flows through the program logic to any other external interface? In any such flow, could any logic alter the value for century in any manner inconsistent with generalized manipulations based on the Gregorian calendar?
  • Do all representations of date with explicit century both internal to the application and in all interfaces satisfy the criteria for century compliance?
Implicit century
  • Does the application use a language, toolkit, and/or application generator (including GUI builders) which permits date representation without an explicit century in the date data types? If so, is century derived for any manipulations or for passing a date value across any interface or for permanent storage? If so, is value for century correct for all values possible values of date each such variable can hold?
  • Does the application use constant values for date or portions of date (i.e., day, month, or year). If so, for any constant which is a full date value or value for year, is century not explicit in the value? Do all manipulations using each constant value directly or indirectly (that is, carried via variables to other operations in the program logic), produce the correct results for all possible values for such date variables?
  • Does the application use any application-program interface (API), such as in-line SQL or IMS DML, which passes date variables? If so, for any date value supplied across this interface, does the receiving software provide a default or derived value of century? Are the rules for derivation on both sides of the interface consistent with each other for possible values for date in the respective fields?
  • Does the application support a user interface containing date fields without explicit century? Is the century in each unambiguous to a user for all possible values for date in each such field?
  • Do all representations of date both internal to the application and in all interfaces satisfy the criteria for century compliance?


For further information directly related to Year 2000 issues, please contact Year2000@mitre.org