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


24

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

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

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

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


27
64ビットtime_t整数を使用する64ビットシステムでは、「ビット」の時間が長くなります-292,277,026,596年12月4日日曜日の15:30:08まで。希望それはあなたのアプリケーションのために十分な長さである。)
ロン

4
それはあなたに「少し」を与えるものではありません。正確に32ビット多くなります。
user12205

5
64ビットのタイムスタンプは、これらの一時的な対策の1つです。CE 100,000,000,000,000でProject Utopiaに取り組んでいる人々はどうですか?機能するコンピューターシステムも必要になります!128ビットのタイムスタンプを使用すると、このユニバースの反復だけでなく、他の多くの時間から任意の時間を一意に識別できます。
ブラックライトシャイニング

1
あなたはこのサイト上の前にすべての答えを受け入れたことがありませんよう:以下の答えの一つがあなたを助けている場合、グレーをクリックすることを忘れないでください☑を意味し、そのテキストの左側で[はい、この答えは有効です;-)
Fabby

回答:


34

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

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

Ubuntuはこれを行います。

$ uname -p
x86_64

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

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

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

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

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

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


8
10年経った今でも、彼らにはそれを修正する22年があります。<クロスフィンガー> ...
マインドウィン

4
注意:符号なし32ビット整数を使用するのはハックです。
ケビン

6

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

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

17
Year10Kバグに合わせてグラスを調達しましょう!;)しかし、真剣に、文字列は本当に拡張可能ですが、それらは比較的巨大であり(あなたの例は200ビットです!)、原始数の解析と操作は膨大な速さです。それは重要です。
オリ

6
これは表示に最適な形式であり、そのためだけのものです。比較、算術など、Unixタイムスタンプを整数(または浮動小数点数)として比較するなど、それ以外の場合(つまり、ユーザーにフォーマットする最後の瞬間までデータを処理する)の方がはるかに優れています。
エグモント

1
@Oli実際に重要なのは重要です。UNIXエポックよりも古い時間がある場合、このソリューションは失敗しません。この形式は、プロトコルおよびAPIで、インターネット全体の日付に使用される標準です。MariaDB列に何かを保存する場合、実際には、ディスクに保存する方法です。確かに、メモリ内で、より使いやすいデータ構造に保存することもできます。また、常にUTCを使用する場合、最後の40ビットは必要ありません。
ドビー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.