web-dev-qa-db-ja.com

タイムスタンプ、64ビットUbuntuシステムの2038年問題

64ビットUbuntuシステムを使用しています。

現在、MariaDBを組み込んだプロジェクトに取り組んでいます。タイムスタンプ技術をプロジェクトに導入して、さまざまなタイムゾーンで正しい時刻を受け取るようにする予定です。

タイムスタンプに関する2038年問題に関する記事を聞いて読んだことがあります。多くの記事では、64ビットシステムを使用して「ビット」をより多く購入することを提案しています。

この「ビット」はどれくらいの時間を指しているのでしょうか?最後までWebアプリケーションを管理できるほどの長さですか?そうでない場合は、たった2年の延長のように見えますが、2040年になると、適切に動作しないアプリケーションがあるのでしょうか?

24
tet

文字通り「ビット」を購入するオプションがある場合、つまり、符号付き32ビット整数から符号なし32ビット整数への転送がある場合は、2106でも機能し続けます。

64ビットへの転送は「やや良い」です。数千億年の解像度があります。

Ubuntuはこれを行います。

$ uname -p
x86_64

$ date --date=9090-01-01 +%s
224685532800

ただし、それはOSレベルです。 Ubuntuが時刻に64ビット整数を使用しているからといって、MySQL/MariaDBがタイムスタンプをstoreに使用するわけではありません。 2038年を過ぎた日付が重要な場合は、すぐにテストを開始してください。

実際、時間を節約できます。まだ壊れています。 このバグは10年以上前に報告されました しかし、メインテストは64ビット整数で失敗します。

mysql> select from_unixtime(2548990800);
+---------------------------+
| from_unixtime(2548990800) |
+---------------------------+
| NULL                      |
+---------------------------+
1 row in set (0.00 sec)

これもストレージではありません。それは少し哀れです。

(そして、はい、それはMariaDBバージョン10.1で実行されました)

34
Oli

整数として保存しないでください。 ISO 8601 形式の日付文字列として保存します。これは、インターネット全体で使用される標準形式です。

9999-12-31T23:59:59+00:00
6
dobey