TECHNOLOGY

FAQ (よくある質問)

対象バージョン : 6.0、7.0
対象OS : Windows95/98/ME ,WindowsNT/2000

QUESTION ( SQ0106015 )

西暦2001年9日9日以降、プログラムが正しく動作しなくなる問題についての対応

ANSWER

この問題はUnix,Windows系プラットフォーム共通の特異日に関する問題であり、Y2Kと同様、同時多発する可能性のある日付問題です。 

  1. 「西暦2001年9月9日以降に発生する問題」の内容

    Unix,WindowsのTIME関数で求める通算秒は、GMT/UTC 1970年1月1日午前0時00分00秒を起点としている(1秒毎に1を加算)。この値がGMT/UTC 2001年9月9日午前1時46分40秒(日本時間同日 10時46分40分)に10進数の文字列表示で9桁から10桁になる。この桁あふれを考慮していない場合、問題が発生する。 
    1973.03.03 09:46:40(GMT) →  100000000秒 
    2001.09.09 01:46:39(GMT) →  999999999秒 
    2001.09.09 01:46:40(GMT) → 1000000000秒

  2. 不具合内容

    (1)領域を9バイトしか確保していないため、桁あふれが発生した 場合に領域破壊をおこす。 
    (2)通算秒を文字列比較していたため、大小(時刻)比較が 逆転する(先頭の’1’と’9’の比較から1000000000以上の方が過去と判断される)。

    しかし、もともとSQL Anywhereでは、日時を格納するエリアとして、8バイトのエリアを使用しております。この上位4バイトには日、時、分を格納し、下位4バイトには秒/ミリ秒を格納しています。

    このことから、SQL Anywhereでは、1600-02-28 23:59:59 to 7911-01-01 00:00:00.の日付範囲についてサポートしておりますので上記のような問題は起こりません。