パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

2038年問題まであと8億秒」記事へのコメント

  • 出来上がったもののテストしてたら2038年問題に遭遇しましたよ。
    会員の有効期限が30年くらいのものがあって、それをテストしたらエラー発生。
    いろいろと原因を調べていくとどうやら30年有効のはずなのになぜか19xx年までの有効年月と判断されて弾かれてました。

    対応してるところは大丈夫と思いますが、長いスパンで見るシステムなんかは(保険とか)気にしてたほうがいいんでしょうね。

    # さすがに引退はしてると思うけど、25年後に自分のプログラムを修正する可能性を考えたら今のうちに対応しといたほうがいいんだろうな・・・

    • Windows と Linux で同じソースのプログラムでソフト作ったら、
      それぞれで作ったセーブデータに互換性がなくて悩みました。

      調べたら、構造体のサイズが違っていたのが原因でした。
      ヘッダ調べたら、リナックス側の time_t の定義が __time64_t デフォルトになってました。
      つまり、新しい gcc ライブラリでプログラム組めば対応済みってことかな?

      • Windows側、Visual C++も2005からtime_tは64-bitがデフォルトになりました。ソースコードがあれば、新しい環境でコンパイルすればとりあえずは良いわけです(ほかで指摘されているように、お行儀の悪いコードでなければ)。

        • 2000年問題が問題になったのは、DBなんかで年を二桁固定にしてたのが多かったからですよね。外部仕様の変更は大仕事です。対応修正の反映更新を全システム同時に行う必要があるし。

          一方、2038年がそんな外部仕様レベルで問題になるのは、通信プロトコル、ファイル入出力、DB定義なんかの外部仕様で、32bit型整数でUNIX time をそのまま使っていた場合、なわけですが、そんなことをする該当例はそれほど多くないと思います。DBなら普通はDate型か年月日時分秒にするだろうし。

          それなら、あとは時刻を time_t 型として適切に処理するように、という内部処理的な問題なので、

          • by Anonymous Coward on 2012年09月17日 2時22分 (#2233106)

            > UNIX time 32bit整数を外部仕様に使ってたとしたら…ご愁傷様です。

            ふつーはマルチプラットフォームで「セーブデータの互換性」が必要なときは
            構造体のバイトイメージを外部仕様なんかにしないと思うんだ。

            世の中には
            ・x86は前提にするけどOSは複数
            ・多数派のx86で一番早くなる仕様
            とかの謎要件もあったりするから、元コメがどうかはわかんないけど、
            たいていはエンディアン/バイトオーダ/アラインメントが違う実行環境のことを
            よく知らないタコが仕様切ってトラブル起こす原因になっていたりするわけだが。
            # 挙句の果てにショボいモバイル端末側ががんばって変換しながらセーブデータ読む羽目になってたりとかな。

            親コメント

日々是ハック也 -- あるハードコアバイナリアン

処理中...