UNIX タイムスタンプはタイムスタンプを保存する最良の方法ですか?

StackOverflow https://stackoverflow.com/questions/178704

  •  05-07-2019
  •  | 
  •  

質問

私はいつもすべてのことに UNIX タイムスタンプを使用していますが、もっと良い方法があるかどうか疑問に思っています。

タイムスタンプを保存するために何を使用しますか?またその理由は何ですか?

役に立ちましたか?

解決

どのようなタイムスタンプの保存を選択しても、地域の解釈の問題や時間オフセットの問題を回避することが重要です。Unix タイムスタンプは、地域に関係なく同じように解釈され、タイムゾーンに関係なく同じ時点から計算されます。これは良いことです。

タイムスタンプを 01/02/2008 のようなあいまいな文字列として保存する場合は、ロケールによっては 2008 年 1 月 2 日または 2008 年 2 月 1 日として解釈される可能性があるため、注意してください。

時/分/秒を保存する場合、「どの」時/分/秒が指定されているかを知ることが重要です。これは、タイムゾーン情報を含めることによって実行できます (Unix タイムスタンプは UTC であると想定されるため、必要ありません)。

ただし、Unix タイムスタンプは一部の瞬間を一意に表すことができないことに注意してください。UTC にうるう秒がある場合、Unix タイムスタンプは変更されないため、UTC 23:59:60 と翌日の 00:00:00 はどちらも同じ Unix 表現になります。したがって、本当に 1 秒以上の解像度が必要な場合は、別の形式を検討してください。

Unix タイムスタンプよりも人間が読みやすい形式のストレージを好む場合は、次のことを検討してください。 ISO8601.

物事をわかりやすくするための 1 つのテクニックは、日付を UTC として保存し、ユーザーに日付を表​​示するときにタイムゾーンまたは DST オフセットのみを適用することです。

他のヒント

ログファイルを保存している場合は、peteが大好きで、人間が読めるように、また字句的にソートできるようにしてください。

2008-10-07 09:47:02たとえば。

32ビットUnixタイムスタンプは、数年(2038年1月)にオーバーフローします。考慮してください。通常、SQLではDATETIME形式を使用します。これはYYYY-MM-DD HH:MM:SSであり、時刻は24時間制です。人生を楽にするために、同じ形式でファイルに出力しようとしています。

保存に必要な時代と解像度は? マイクロ秒が必要な場合、または石器時代の日付time_tが最適でない場合があります。 一般的なビジネス目的では、かなり良いです(64ビットと仮定)

タイムスタンプが必要なものによって異なります。

UNIXタイムスタンプは、2008-12-31T23:59:59Zの後の1秒を表すことはできません。 UNIXタイムスタンプを使用して「2009-01-01T09:00:00」-「2008-12-31T09:00:00」を実行すると、結果は正しくありません。これら2つの日付の間にうるう秒があり、それらは区切られます86401秒(Unixのタイムスタンプからわかるように86400ではありません)。

それ以外、および他のレスポンダーが言ったこと以外、はい-UNIXタイムスタンプを使用する方法です:)

データベースのタイムスタンプは、夏時間や現在の現地時間を考慮していないため、データベースには適していません。 MySQLでは、時間として保存し、 MySQL日付および時刻関数を使用して、必要な部分を取得したり、他の日付と比較したりします。

timeval-style(time_t + microseconds)秒未満の精度が必要な場合、それ以外はtime_tのみ。 64ビット整数値を使用してtime_t * 1000000 + usecを格納でき、+ /-292,000年以上にわたってオーバーフローに耐えることができます。

UNIXタイムスタンプの32ビットの問題は、2038年以降に将来の日付を入力するユーザーにとってはかなり厄介なようです。

いずれもMySQLのDATETIMEシーケンスを使用するか、日付をBIGINT(8)符号なし(最大:18クインティリオン)またはFLOATとして保存して、大きな数値を入力できるようにします。その場合、たとえばPHPのdate()関数を使用できません。これは、パラメーターとして整数のみを許可するためです(32ビットシステムによって制限されます)。

私が見つけた解決策は、 PHP 5.2.0 関数を使用することです。 DateTime PHPソリューションは次のとおりです。

UNIX_TIMESTAMP形式を変更する必要はありません。タイムスタンプ用のMySQLストレージとしてBIGINT(8)が署名されていない限り。もう32ビットシステムに制限されることはありません。

タイムスタンプは基本的に:

  • 明確な時点

また、ある時点では無限の解像度を持っているため、タイムスタンプ形式を選択する際の重要なことは、十分な解像度ですか?

  • Unix時間は秒単位でのみカウントされます。
  • Ext 4 にはナノ秒があります
  • Java ナノ秒があります

ほとんどのアプリケーションでは、ナノ秒で十分でした。そのため、これまでのところJava Timestampには適切な解像度がありました。

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