y2000

Solaris and the Year 2000


Note - Please email any year 2000 questions to y2000-info@sun.com.

Overview

The goal of this document is to outline the issues around the transition from December 31, 1999 to January 1, 2000, and to describe the plans to address these issues. The SolarisTM software uses a 32-bit internal date with epoch on January 1 00:00:00 1970. Earlier dates starting from December 13, 1901, can be represented using negative values. The latest possible date using this mechanism is January 19, 2038. All known year 2000 issues will be resolved in the Solaris 2.6 release, which is currently scheduled for August 1997. Solaris 1.1.1vB, 1.1.2, 2.3, 2.4, 2.5, 2.5.1 versions are currently planned to be patched for year 2000 compliance.

The Year 2000 Problem

There are many descriptions of the year 2000 problem. At the center is one main issue: ambiguous use of year data when represented by only two digits.

Definition of Year 2000 Compliance

Please refer to the year 2000 compliance definition at http://www.sun.com/y2000/statement.html.

Status of C Library and Command and Utility Program Behavior

The tables below describe the status of C library behavior and command and utility behavior for both SunOSTM and non-OS functions. The Solaris versions affected by year 2000 are listed in the "Affected versions" column. The "P" suffix after the affected version number indicates that a patch will be available. If there is no "P" suffix, a fix has been identified but planning is not complete. The "Fixed in version" column lists Solaris versions that contain the fixes as standard; that is, the fix has been incorporated into the initial release and no patch is required. Non-Solaris version numbers are clearly marked.

Table 1. Solaris C Library Behavior

Solaris Function

Existing

Behavior

Planned

Behavior

Fix

Ref

Affected versions

Fixed in version

strptime()

bcp mode only

Assumes two-digit year is in 1900-1999 Assume 00-68 are 2000-2068 and 69-99 are 1969-1999 4030158 2.3P, 2.4P 2.5P, 2.5.1P 2.6
srtptime()

localization

Localization fix for 4030158 4039038 2.3P, 2.4P, 2.5P, 2.5.1P 2.6
strptime() %C is inconsistent - reads 20 as 1900 Interpret %C as the century number (i.e., 20 is the year 2000) 1264356 2.4P, 2.5P, 2.5.1P 2.6
strptime() %y does not recognize year 2000 or greater, as %y is a two-digit year representation. Assume 00-68 are 2000-2068 and 69-99 are 1969-1999 4018724 1.1.1vBP, 1.1.2P 2.X
strptime() %C is ignored when used together with %y. Dates outside those allowed by getdate() are disallowed; they shouldn't be. Fix %C with %y and allow years outside the getdate() range 4045229 2.4P, 2.5P, 2.5.1P 2.6
getdate() getdate %C (century) is ignored if the year %y offset is not used If year offset is not given, use current year offset 4050818 2.5P, 2.5.1P 2.6
kerberos - stime(), log(), newlog(), klog() Builds a log with two-digit years, printing years >1999 as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 4030225 2.3P, 2.4P, 2.5P, 2.5.1P 2.6
sa_get_authtokattr.c Error message prints years >1999 as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 4030217 2.5P, 2.5.1P 2.6
strftime() If year is >1999, %y prints 200X as :X, 201X as ;X, 202X as <X, and 203X as =X Print correct digit 1074819 1.1.1vBP 1.1.2
mktime()

bcp mode only

Does not take account of leap years Calculate for leap years 4045941 2.3P, 2.4P, 2.5P, 2.5.1P 2.6
mktime() Does not take account of leap years Calculate for leap years 1220511 1.1.1vBP 1.1.2 , 2.3 and above
Face banner - initial.txt Century hard-coded to 19 Use current century 4030190 2.3P, 2.4P 2.5P, 2.5.1P 2.6
lp - printer interface program script Century hard-coded to 19 Use current century 4030199 2.6
lp - printer interface program script Century hard-coded to 19. Duplicate 4030199 for earlier versions. Use current century 4038501 2.3P, 2.4P 2.5P, 2.5.1P

Table 2. Compiler Behavior

Solaris Compiler

Existing

Behavior

Planned

Behavior

Fix

Ref

Affected versions

Fixed in version

compiler - fortran 77 VMS date extension uses PDP11 format (two-digit year). DATE and IDATE functions use a two-digit year, which breaks in 2000 and beyond. A warning will be printed on compilation if this date function is used. An alternative will be suggested in the documentation (DATE_AND_TIME). 4039702 SC4.0P, SC4.2P, SC5.0P None, use an alternative function.
compiler - fortran 77 Duplicate 4039702 for earlier version. A warning will be printed on compilation if this date function is used. An alternative will be suggested in the documentation (DATE_AND_TIME). 4041810 SC3.0.1P None, use an alternative function.
compiler - pascal Existing date() function uses two-digit year. Add a new function, fdate(), for year 2000-proof date functions 4046030 SC3.0.1P, SC4.0P, SC4.2P SC5.0

Table 3. Solaris Command and Utility Program Behavior

Solaris Utility

Existing

Behavior

Planned

Behavior

Fix

Ref

Affected versions

Fixed in version

date Cannot set date beyond Dec 31 1999

12:59:59 pm

Allow dates in the year 2000 and beyond 1086103 1.1.1vB, 1.1.2P 2.X
date Input for two-digit year restricted within range of 1900-1999 Assume 00-68 are 2000-2068 and 69-99 are 1969-1999 for two-digit years 1264215 2.3P, 2.4P, 2.5P, 2.5.1P 2.6
touch date option doesn't work for years >1999 Allow dates after 1999 4042646 1.1.1vBP, 1.1.2P 2.X
troff -me, -mm, -ms Does not display the correct date for dates >1999 Allow dates in the year 2000 1264657 2.3P, 2.4P, 2.5P, 2.5.1P 2.6
troff -me, -mm, -ms Does not display the correct date for dates >1999 Allow dates in the year 2000 4042232 1.1.1vBP, 1.1.2P 2.X
netstandard interface script Date is hard-coded to 19XX Allow dates outside 19XX 4035342 2.6
w Date manipulation assumes USA date format Date manipulation fixed with internationalization 1144175 2.3P 2.4 and above
w Can print years >1999 as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 4054980 2.3P 2.4 and above
w Prints years >1999 as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 4035290 1.1.1vBP, 1.1.2P 2.X
whodo Date manipulation assumes USA date format Date manipulation fixed with internationalization 1144185 2.3P 2.4 and above
bar Does not work when system date is 2000 or greater Fix the date problem to allow it to work in 2000 4018723 1.1.1vBP, 1.1.2P 2.X
passwd The -a and -sa options prints years >1999 as 3 digits Print years >1999 as 2 digits (e.g., 2000 as 00) 1264840 2.3P, 2.4P 2.5P, 2.5.1P 2.6
passwd Prints years >1999 as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 4035308 1.1.1vBP, 1.1.2P 2.X
uustat, uucico Log files print years >1999 as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 1265086 2.3P, 2.4P 2.5P, 2.5.1P 2.6
listen Prints years >1999 as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 1265174 2.3P, 2.4P, 2.5P,

2.5.1P

2.6
acct commands Dates after 1999 are invalid Allow dates up to 2037 1265175 2.3P, 2.4P, 2.5P,

2.5.1P

2.6
acct commands Dates after 1999 are invalid Allow dates up to 2037 4035349 1.1.1vBP, 1.1.2P 2.X
ufsdump Prints years >1999 as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 1265176 2.3P, 2.4P, 2.5P, 2.5.1P 2.6
ufsdump One condition missed from 1265176 4044459 2.3P, 2.4P, 2.5P,

2.5.1P

2.6
ckdate Incorrect validation of the two-digit year Assume 00-68 are 2000-2068 and 69-99 are 1969-1999 for two-digit years 1266030 2.3P, 2.4P 2.5P, 2.5.1P 2.6
at Will not allow dates after 1999, causes bad year error Allow dates in 2000 and beyond 1194556 2.3P, 2.4P 2.5 and above
at Will not allow dates after 1999, causes bad year error Allow dates in 2000 and beyond 4042239 1.1.1vBP, 1.1.2P 2.X
atq Date displayed incorrectly for years later than 1999 Display years after 1999 correctly 1258772 2.3P, 2.4P, 2.5P, 2.5.1P 2.6
atq Date displayed incorrectly for years later than 1999 Display years after 1999 correctly 4042289 1.1.1vBP, 1.1.2P 2.X
sccs Will not allow dates after 31 December 1999 Allow dates in 2000 and beyond, using the two-digit rules 1172501 2.3P, 2.4P, 2.5P, 2.5.1P. 2.6
sccs Will not allow dates after 31 December 1999 Allow dates in 2000 and beyond, using the two-digit rules 4042441 1.1.1vBP, 1.1.2P 2.X
sar Prints years >1999 as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 1258791 2.3P, 2.4P 2.5P, 2.5.1P 2.6
fsck Prints years >1999 as 3 digits (e.g., 2000 as 100 when the system year is >1999) Print years >1999 as 2 digits (e.g., 2000 as 00) 1265170 2.5P, 2.5.1P 2.6
sendmail Prints two-digit year in mail header as 3 digits when year > 1999 (e.g., 2000 as 100) Use a four-digit year in the mail header 4035337 1.1.1vB, 1.1.2P 2.3 and above
xmh Two-digit years are always in the 1900s mh (which xmh depends on) is maintained by Information and Computer Science, University of California, Irvine. Use of MH version 6.8 or later with a four-digit date format will ensure year 2000 compliance of xmh. 4055452 2.3, 2.4, 2.5, 2.5.1,

2.6

Workaround, no fix available as code is external to Sun.

None, use four-digit year
eeprom Fails for years after 1999 Allow years after 1999 4043537 2.3P, 2.4P. Product not supported after 2.4
eeprom Years after 1999 cause an error Allow years after 1999 4035323 1.1.1vBP, 1.1.2P 2.X

Table 4. Non-OS Command and Utility Program Behavior

Non-OS Utility

Existing

Behavior

Planned

Behavior

Fix

Ref

Affected versions

Fixed in version

SunViewTM - clock Prints years >1999 as 3 digits (e.g., 2000 as 100) No fix planned 4037910 1.1.1vB, 1.1.2 No fix planned
SunView fileview Does not work when year is 2000 or greater No fix planned 4037925 1.1.1vB, 1.1.2 No fix planned
Open-

WindowsTM filemgr

Identifies year 01 as 1901 Assume 00-68 are 2000-2068 and 69-99 are 1969-1999 1255947 1.1.1vBP, 1.1.2P, 2.3P and above 2.6
OW calendar Unable to display year 2000 and beyond Allow dates in the year 2000 and beyond 1124545 1.1.1vB, 1.1.2, 2.3 and above
OW calendar Calculation of leap year for the appointment editor is wrong Calculate leap years correctly 1175511 1.1.1vBP, 1.1.2P, 2.3P and above 2.6
OW calendar cm cannot pick a day for appointment editor after 1999 Allow years after 1999 4048634 1.1.1vBP, 1.1.2P, 2.3P and above 2.6
OW calendar cm appointment popup does not display correct date Print years >1999 as 2 digits (e.g., 2000 as 00) 4052365 1.1.1vBP, 1.1.2P, 2.3P and above 2.6
OW DocViewer Prints years >1999 as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 4048752 1.1.1vBP, 1.1.2P 2.X
OW calendar Appointment editor prints a one-digit year Print years >1999 as 2 digits (e.g., 2000 as 00) 4049725 1.1.1vBP, 1.1.2P, 2.3P and above 2.6
OW calendar Prints years >1999 as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 4057046 1.1.1vBP, 1.1.2P 2.X
OW MailTool MailTool does not sort properly by time and date Fix the sort mechanism 4050471 1.1.1vBP, 1.1.2P, 2.3P and above 2.6
OW File Manager Prints years >1999 as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 4045142 1.1.1vBP, 1.1.2P, 2.3P and above 2.6
OW Performance Meter Prints years >1999 as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 4045300 1.1.1vBP, 1.1.2P, 2.3P and above 2.6
OW calendar Prints years >1999 as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 4047146 1.1.1vBP, 1.1.2P, 2.3P and above 2.6
OW ImageTool Prints years >1999 to .ps file as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 4045282 1.1.1vBP, 1.1.2P, 2.3P and above 2.6
OW imageTool Prints years >1999 to .eps file as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 4045291 1.1.1vBP, 1.1.2P, 2.3P and above 2.6
OW Calendar Calendar appointment editor expects 3 digits for years >1999 (e.g., 100 for 2000) For two-digit years, assume 00-68 are 2000-2068 and 69-99 are 1969-1999. Four- digit years also accepted. 4045161 1.1.1vBP, 1.1.2P, 2.3P and above 2.6
SunDiagTM Prints years >1999 to log file as 3 digits (e.g., 2000 as 100) Print the year as 4 digits 4037960 1.1.1vBP, 1.1.2P (SunDiag 2.3.1).

2.4P (SunDiag 4.4)

2.5 and above
CDE actions Two-digit year in the error log - strftime() with %x. Use four-digit year by changing to the %c format 4049935 Under investigation CDE 1.2 (Solaris 2.6)
CDE Help Viewer Calls strftime() with %x Use %c format. 4049936 Under investigation CDE 1.2 (Solaris 2.6)
CDE mail Vacation date accepts and displays a two-digit year Use two-digit rule. Update with four-digit fix after FCS. 4052208 Under investigation CDE 1.2 (Solaris 2.6)
CDE mail Vacation date is not validated correctly Duplicate of 4052208 for documentation issues. Release notes updated. 4034042 CDE 1.2 (Solaris 2.6)
CDE mail Prints years >1999 as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 4048183 Under investigation CDE 1.2 (Solaris 2.6)
CDE imagetool Prints years >1999 as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 4047229 Under investigation CDE 1.2 (Solaris 2.6)
CDE calendar Leap year allowed as start of recurring calendar appointment Disallow yearly unless appointment is once every 4 years! No error message is given; the action is rejected silently. 4048215 CDE 1.2 (Solaris 2.6)
CDE calendar Document the behavior detailed in 4048215 Release notes updated 4060832 CDE 1.2 (Solaris 2.6)
CDE calendar Document the behavior detailed in 4047269 Document updated 4055468 Under investigation CDE 1.2 (Solaris 2.6)
CDE dtmail Prints years >1999 as 3 digits (e.g., 2000 as 100) Print years >1999 as 2 digits (e.g., 2000 as 00) 4055125 Under investigation CDE 1.2 (Solaris 2.6)
CDE calendar View fails past 2000 if default is current year. Allow views in 2000 and beyond by using the four-digit year representation 4055128 Under investigation CDE 1.2 (Solaris 2.6)
CDE calendar strftime() is used with %x resulting in a two-digit year Use %c with strftime() 4055157 Under investigation CDE 1.2 (Solaris 2.6)
CDE calendar Find 'To' date validation non-year 2000 compliant. 1900-1969 interpreted as post 2038. Assume 00-68 are 2000-2068 and 69-99 are 1969-1999 4055523 CDE 1.2 (Solaris 2.6)
CDE calendar Find 'To' date validation non-year 2000 compliant. 1900-1969 interpreted as post 2038. Assume 00-68 are 2000-2068 and 69-99 are 1969-1999 4056822 1.0.2P
CDE calendar 'Recurring yearly' appointment for 1 year will allow 29/2/2000 to be selected as the start point Disallow yearly unless appointment is once every 4 years! No error message is given; the action is rejected silently. 4056819 1.0.2P
FireWall-1TM User's expiration date cannot be set beyond 31 December 1999 Allow expiration date after 1999 1217594 FireWall 2.1 and all previous versions. FireWall 3.0
AdminSuiteTM Can't create users with expiration dates after 12/31/1999 Allow user entries to expire after 12/31/1999 1236255 AdminSuite2.1P, AdminSuite2.2P, AdminSuite2.3P
AdminToolTM Can't create users with password expiration after 2002 Allow user entries to expire after 2002 1258449 2.5.1P, 2.5P, 2.4 and all previous versions. For 2.3 and 2.4, upgrade to compliant AdminSuite version 2.6
install When the hardware clock is 2000 or greater, the install enters an endless loop. The screen freezes and the system continues to beep. A message says "The value you entered is too high." Allow dates after 1999 1262034 2.3, 2.4, 2.5, 2.5.1.

Previous releases cannot be fixed.

2.6
install date and time dialog displays 19XX if the system date is 2000 or greater Display correct century 4034716 2.3, 2.4, 2.5, 2.5.1.

Previous releases cannot be fixed.

2.6
install Does not recognize two-digit years after 1999 Allow two-digit years after 1999 4043111 1.1.1vB, 1.1.2.

Previous releases cannot be fixed.

2.X
JavaTM DateFormat-

.parse

SimpleDateFormat always parses two-digit years relative to 1900 (e.g., 05/04/02 is May 4 1902) Document this behavior and recommend the use of a four-digit year. 4065427 2.6

External API cannot be changed.

JavaTM

- jdbc

Date() and Timestamp() always parse two-digit years relative to 1900 (e.g., 05/04/02 is May 4 2002) Date and Timestamp() are to be deprecated in the next release, and flagged in the documentation. 4047499 2.6

External API cannot be changed.

Other Sources of Information

International Standard ISO/IEC 9945-1: Second Edition 1996-07-12 (ANSI/IEEE Std 1003.1 1996 Edition) Information Technology - Portable Operating System Interface (POSIX) - Part 1: System Application Program Interface (API) [C Language] ISBN 1-55937-573-6

X/Open System Interfaces and Headers Issue 5, see http://www.rdg.opengroup.org/public/tech/base/year2000.html

"Year 2000:The Millennium Rollover - Practical advice for users of the Single UNIX Specification" v1.2 1997/06/09, see http://www.rdg.opengroup.org/public/tech/base/year2000.html

"Solaris Internationalization Guide For Developers", for Solaris 2.6, part number 802-5878-10 or 805-0669 (Japan). "Developer's Guide to Internationalization", for Solaris 2.5.1, part number 802-1950-10 or 802-3454 (Japan). Earlier versions are out of print. Both are available from http://sunexpress.usec.sun.com/

Sun Year 2000 Program at http://www.sun.com/y2000

Sun Software Y2000 Developer's Guide at http://www.sun.com/y2000/y2000devguide.html

Last Updated: Mon Aug 4 11:09:16 PDT 1997
Copyright 1994-1997 Sun Microsystems, Inc., 901 San Antonio Road, Palo Alto, CA 94303 USA. All Rights Reserved