質問

Windowsの公式Python 2.5は、32ビットtime_tを使用するVisual Studio.Net 2003でビルドされました。年が>のとき2038年、それはただ例外を与えます。

これはPython 2.6(VS2008でtime_tを64ビットに変更)で修正されましたが、多くのモジュールが既にコンパイルされているため、2.5を使用したいと思います。

だからここに私の質問があります-私のプログラムが簡単に年を処理できるようにする解決策はあります> 2038年、まだ公式のPython 2.5を使用していますか?たとえば、" time64" や" longtime"のような事前に作成されたライブラリなど...

2.6+にアップグレードするように、またはバグを忘れるように言わないでください。それを機能させる必要があるので、ここに質問を投稿します。

役に立ちましたか?

解決 3

私が見つけた最良の解決策は、Python 2.5のソースコピーを取得し、time_tをデフォルトで64ビットに設定するコンパイラー(VS2005またはVS2008など)で時間モジュールを再コンパイルすることです(Cランタイムを構成して、サイドバイサイドの問題)。

他のヒント

標準ライブラリの datetime モジュールは正常に機能するはずです。 datetime が提供しない time モジュールには何が必要ですか?

私はささいなことをするつもりはありませんが、そうではない理由:

  • Python 2.5のY2038バグを忘れる
  • 2038年以前の将来のある時点でPython 2.6にアップグレードする

編集: 明確にするために:(そして、私は真剣です-私は楽しみを突くつもりはありませんでした)

おそらく、現在から2038年までの無期限にPythonを2.6(またはそれ以降)にアップグレードできます。2012年かもしれません。2015年かもしれません。2037年かもしれません。

アプリケーションのPythonタイムスタンプ変数の違いに気付いている場合(私はPythonユーザーではありません)、これらは考慮すべき重要な側面のようです:

  • 永続的に保存されるデータ
  • どのようにして永続化されたPython 2.5タイムスタンプ変数がPython 2.6を使用して復元されるか(おそらく「正しいことをする」ことになるでしょう)
  • 古いデータが、あいまいさが生じるのに十分な長さの永続的な形式で保存されるかどうか(たとえば、1950年から2049年までを考えると「96」年は曖昧ではありませんが、そのデータが96"は1996、2096、または2196です)

回答が良好な場合は、2038バグのある通常のタイムスタンプを使用してください。アプリケーションを別のタイムスタンプ(データベースのタイムスタンプ文字列など)で動作させるために必要な再設計/リファクタリングの量と比較する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top