もう一度 Y2.038 年バグについて

1998 年 9 月 30 日

この問題についてはもう聞き飽きたのではないでしょうか。Dr. GUI も同じです。

2000 年問題はもう忘れてしまいたのですが(まだ 1998 年なのに。トリックみたいですね)、賢明な読者は、最後のコラム(Dr. GUI、2038年バグを語る)ではいくつかの問題が未解決のままになっていることに気がついたことと思います。

クリス ハバードさんは、COleDateTime メソッドの 1 つにも問題があることを指摘しています。スタティック メソッド COleDateTime::GetCurrentTime の現在のインプリメンテーションでは、time_t を戻す、C のランタイム関数 time が呼び出されます。この制約事項は、現在のところ文書化されていません。彼は Microsoft Foundation Classes(MFC)のソース コードを探求してこれを見つけたようです(Dr. GUI が口を酸っぱくして言っている「ソースを使うんだ、ルーク!」を実践しているようですね)。よく見つけましたね。2038 年に対応したければ、この関数を使用しないでください。また、COleDateTime には time_t を受け取るコンストラクタと代入演算子があります。これらも使用しないでください。

J. S. ジェンセンさんからは、私が言及した日付について、time_t が 1970 年 1 月 1 日の真夜中以降経過した秒数とは言っても、現地時間(ここレッドモンドでは太平洋時間)ではなく、世界標準時(UTC)、つまりグリニッジ標準時(GMT)での時間だということを指摘してもらいました。つまり、Visual C++ バージョン 6.0 のランタイム ライブラリでは、最終期限は「2038 年 1 月 19 日火曜日 14:07」になります。彼はまた、限界に達した後、時間は「1901 年 12 月 13 日金曜日 20:45:52」になることも指摘してくれましたが、これはまあ、余分な話です。C のランタイム ライブラリの資料(MSDN ライブラリ オンラインの「Visual C++ Programmer's Guide」参照)は、time_t 変数の中では負数(つまり 1970 年 1 月 1 日以前の日時)を使用してはならないことを強く示唆しています(mktime の資料を参照してください。これには、この日付以前の日時をエラーと見なし、time_t 変数を–1 に設定すると書いてあります)。Dr. GUI が gmtime を使用して time_t を変換するテスト プログラムを作成したところ、gmtime に対するパラメータが負数のときには、一般保護エラー(GPF)になりました。

しかし、最良の知らせはブレット グリンズレードさんからのものでした。グリンズレードさんは、Windows NT の 64 ビット バージョンでは time_t が 64 ビットの整数として定義されるということを指摘してくれました。これはかなり余裕があります。何百万年も使用できそうです(いやいや、ここで正確に何年になるかは計算しない ことにします)。したがって、問題が発生する前にコードを Windows NT 64 に移植しておけば、問題は起きません。

Mobile Channle のアップデート

パーム サイズ PC(P/PC)の優れた点の 1 つとして、P/PC を特別な形式の Internet Explorer 4.x チャンネルと同期化する Mobile Channel があります。

ところで、クリス デ ヘッレラさんの Windows CE Web サイトには、Microsoft から発行されているものよりも内容豊富な Mobile Channels リストがあります。Dr. GUI はこの中のいくつかにしか登録していません。どれに登録しているかは秘密です。ただし、心臓学は専門ではないので、心臓学チャンネル(Cardiology Channel)に登録していないのは確かです(心臓がないからではありませんよ)。

いずれにしても、まじめなものから、ばかげたもの、そして崇高なものに至るまで、クリスのチャンネルのリストは http://www.cewindows.net/wce/20/mobilechannels.htmで見ることができます。MSNBC、Pen Computing、および 心臓学チャンネルの他にも、次のようなチャンネルがあります。

  • オーストラリアのアデレード、そしてイギリスのカンタベリーのシティ ガイド

  • P/PC を読むための本:『モンテクリスト伯爵(The Count of Monte Cristo)』と『トム ソーヤーの冒険(Tom Sawyer)』

  • いくつかの P/PC チャンネル

  • カクテルのレシピの「Drink Boy」 Mobile Channel(飲酒運転はやめましょう)

  • スポーツ情報:世界中のさまざまなチームのスケジュールと統計資料

  • Visual Basic 情報、宗教チャンネル、政治チャンネル、お笑いチャンネル…

  • …などなどなど…