[Info-vax] 2010 date issues

Hein RMS van den Heuvel heinvandenheuvel at gmail.com
Sat Jan 16 12:05:11 EST 2010


On Jan 15, 2:10 pm, Paul Sture <paul.nos... at sture.ch> wrote:
> In article <xr14n.227$I8.... at news.indigo.ie>,
>  Tom Wade <nos... at picard.eurokom.ie> wrote:
:
> > Another typical 'short-cut' was where systems have a two digit field in a
> > database record for the date.  The Y2K fix involves translating between
> > the 2-digit stored date, and a 4-digit display date.
> >   To do this, some cutoff is assumed, for example if the 2-digit date is < 50
> >   it is assumed 2000

:

> This exists in OpenVMS Alpha (I don't know about IA64), and has to be
> one of the most misguided attempts ever to address the Y2K issue.

Correct. It is coded up in the core SYS$ASCTIM.
Undocumented with that routine.

0 - 99 use a 2-digit year handler in there.
100 - 1600, and 10000+ are invalid
1601 - 9999 normal.

It can be seen with simple DCL like:

$ write sys$output f$cvtime("--56") --> 2056-01-16 00:00:00.00
$ write sys$output f$cvtime("--57") --> 1957-01-16 00:00:00.00

Or in any program like:

1       map (x) long bintim, long bintim_hi, string asctim=23
        while 1+1=2
          INPUT asctim
          CALL SYS$BINTIM (asctim,bintim)
          CALL SYS$ASCTIM (0% by value,asctim, bintim, 0% by value)
          PRINT asctim
        NEXT

The transition year is hardcoded in an executive cell:

$ anal/sys ...
SDA> eval @EXE$GL_TRANSITION_YEAR
Hex = 00000000.00000039   Decimal = 57

Anything above that (thru 99)  becomes 1900 + YY, below is 2000 + YY
You can poke that cell to change the transition, but the code does NOT
test a special value to make a year less than 100 invalid. That would
have been thoughtful.
Base code was added in 1991, changed to use the cell in 1992.

fwiw,
Hein.



More information about the Info-vax mailing list