community.borland.com

Article #25422: Testing the Year 2000 with InterBase

Problem:
How do I know InterBase is Y2k compliant?

Solution:
You can run the following script and test it yourself

------- cut 8< ---------------------
create database "y2k.gdb" user "sysdba" password "masterkey";
commit;

connect y2k.gdb user "sysdba" password "masterkey";
commit;

create table y2k_test (place_in_time varchar(40),
	its_date_stamp date);
commit;

insert into y2k_test (place_in_time, its_date_stamp)
	values ("yesterday", "yesterday");

insert into y2k_test (place_in_time, its_date_stamp)
	values ("today", "today");

insert into y2k_test (place_in_time, its_date_stamp)
	values ("tomorrow", "tomorrow");

insert into y2k_test (place_in_time, its_date_stamp)
	values ("(cast('today' as date) + 7", (cast('today' as date) + 7));

insert into y2k_test (place_in_time, its_date_stamp)
	values ("(cast('today' as date) + 30", (cast('today' as date) + 30));

insert into y2k_test (place_in_time, its_date_stamp)
	values ("(cast('today' as date) + 365", (cast('today' as date) + 365));

insert into y2k_test (place_in_time, its_date_stamp)
	values ("(cast('today' as date) + 626", (cast('today' as date) + 626));

insert into y2k_test (place_in_time, its_date_stamp)
	values ("(cast('today' as date) + 627", (cast('today' as date) + 627));

insert into y2k_test (place_in_time, its_date_stamp)
	values ("(cast('today' as date) + 628", (cast('today' as date) + 628));

insert into y2k_test (place_in_time, its_date_stamp)
	values ("(cast('today' as date) + 7300", (cast('today' as date) + 7300));

insert into y2k_test (place_in_time, its_date_stamp)
	values ("(cast('today' as date) + 50000", (cast('today' as date) + 50000));

insert into y2k_test (place_in_time, its_date_stamp)
	values ("jan 1, 00", "jan 1, 00");

insert into y2k_test (place_in_time, its_date_stamp)
	values ("jan 1, 47", "jan 1, 47");

insert into y2k_test (place_in_time, its_date_stamp)
	values ("jan 1, 48", "jan 1, 48");

commit;

select * from y2k_test;
commit;

------- cut 8< ---------------------

You will get the following results:
PLACE_IN_TIME                               ITS_DATE_STAMP
========================== ==============

yesterday                                            21-APR-1998
today                                                    22-APR-1998
tomorrow                                            23-APR-1998
(cast('today' as date) + 7                  29-APR-1998
(cast('today' as date) + 30               22-MAY-1998
(cast('today' as date) + 365             22-APR-1999
(cast('today' as date) + 626              8-JAN-2000
(cast('today' as date) + 627              9-JAN-2000
(cast('today' as date) + 628             10-JAN-2000
(cast('today' as date) + 7300           17-APR-2018
(cast('today' as date) + 50000        15-MAR-2135
jan 1, 00                                               1-JAN-2000
jan 1, 47                                               1-JAN-2047
jan 1, 48                                               1-JAN-1948

The last result is a little weird - you might think.  Why do we do this:

InterBase provides a reasonable default interpretation of two-digit years.
The InterBase server interprets a two-digit year as the nearest year within a
50-year range. For example, 2/28/48 is interpreted as 1948, whereas
2/28/47 is 2047.

For a full explanation please see the Y2K document on the InterBase
website.

Last Modified: 27-OCT-00