開発者ツール · Unix タイムスタンプ コンバータ
負の Unix タイムスタンプ: 1970 より前の日付の表現方法
· 仕組み
タイムスタンプ unix-time データ形式
Unix 時間は 1970 から順方向にカウントされますが、逆方向にもカウントされます。この投稿では、負のエポックが何を意味するか、1 がどのようにして 1969 の最後の 1 秒になるか、および正の値を想定しているシステムがどこで壊れるかについて説明します。
マイナス記号付きの生年月日 — 1965 生まれのユーザーは負の整数として保存され、それをエラーとして処理したコード
1970 より前に生まれた人のレコードには、正当に負の Unix タイムスタンプを含めることができます。先頭のマイナス記号をすべて拒否すると、表現の選択がデータ損失のバグに変わります。 ToolAcre のパーサーはオプションの符号を受け入れ、`fromEpoch` は、解釈されたゼロ未満のミリ秒値を無効として扱うのではなく、`beforeEpoch` としてマークします。
表示には、その瞬間が Unix エポックより前であることを説明するメモが追加されます。これは、異常な兆候がレビューアーに表示されるため、黙って日付をレンダリングするよりも強力です。上流のスキーマが否定を禁止している場合、失敗はそのスキーマまたは移行に属し、ゼロの両側にカウントをマップする算術に属しません。
符号付き整数とエポック — time_t が署名される理由、および −1 と −86400 が何に対応するのか
ゼロは 1970-01-01T00:00:00.000Z です。リポジトリのテストでは、−1 秒が直前の瞬間である `1969-12-31T23:59:59.000Z` であることが証明されています。同様に、−86,400 秒は、0 より前の固定 POSIX 日の 1 日です。符号付き算術演算により、古いレコードに対して 2 番目のエポックが必要になる代わりに、軸が連続になります。
アウトラインでは、署名付きストレージは `time_t` に帰属しますが、このコードは、すべてのプラットフォームで使用される設計履歴やタイプを確立するものではありません。より狭い証拠だけで十分です。JavaScript の数値は負の値になる可能性があり、検出には絶対的な大きさが使用され、日付は結果をフォーマットできます。生成フィールドの宣言された型を、コンバーターが受け入れる入力とは別に記述します。
すべての time_t がそのタイプを選択した理由を主張しない、ゼロ付近の符号付きエポック算術
負の値は、正の値と同じ単位の区別を保持します。 `−1000` 秒はエポックの 1,000 秒前を指しますが、`−1000` ミリ秒はその 1 秒前だけを指します。自動検出では両方とも秒として扱われます。その大きさが 10¹¹ を下回っているため、短いプレエポックのミリ秒カウントには明示的なミリ秒の選択が必要です。
これは、桁数の民間伝承の具体的な失敗です。マイナス記号と 4 桁の数字を見た開発者は、見た目から単位を推測することはできません。ソース契約を使用し、セレクターを選択し、ユニットノートを調べます。 ToolAcre のマグニチュード ルールは一般的なデータのデフォルトであり、1970 に近い履歴値のメタデータの代替ではありません。
負の値が失敗する場合 — センチネルとして −1 を使用するシステム、署名されていないストレージ、クランプする日付ピッカー、およびそれらを拒否する言語
コンバーターの外部では、`−1` が欠損値センチネルとして予約される場合があり、符号なし列は負の瞬間を保持できません。これらは一般的な設計の可能性ですが、リポジトリは特定のデータベース、日付ピッカー、または言語がどのように動作するかを保証できません。アーカイブ日付を移動する前に、実際の境界をテストしてください。
有用なプローブには、null または文書化された欠落マーカー、-1、および明らかに古い日付の 3 つの値が含まれています。 −1 が消えて古い値が残っている場合、センチネルの処理が関係します。すべてのネガが失敗した場合は、タイプと検証を検査します。 1970 年を追加したり、絶対値を取得したりして症状を「修正」しないでください。両方とも異なる瞬間が作成されるためです。
作業例: 14182940 — 算術を UTC およびグリニッジ以西のローカル ゾーンで 7 月の 1969 日付に変換する
−14,182,940 秒の間、エポックから開始して後方に進み、164 86,400 秒日を完了し、13,340 秒を残します。残りは 3 時間、42 分、20 秒です。結果として得られる UTC 読み取り値は `1969-07-20T20:17:40.000Z` であり、この記事のために特別に選択された瞬間です。
UTC より西のローカル読み取り値では、より早い実時または別の日付が表示される場合がありますが、その正確な結果はブラウザーのゾーンと国際ルールによって異なります。普遍的な答えを出版するのではなく、パネルからそれを読んでください。修正された検証は ISO 行です。ローカル行は、同じ負のカウントに対する環境アノテーションです。
作業例: 検証可能な UTC 算術による −14,182,940 の変換
ToolAcre は、解釈された値を、ソースに記載されている日付範囲である ±8.64×10¹⁵ ミリ秒と比較してチェックします。また、2,208,988,800 秒が `1900-01-01T00:00:00.000Z` 秒に変換されることも証明されています。これらの事実は、すべてのストレージ システムが同じ範囲を伝送できることを意味することなく、ルートが 1970 のかなり前に到達することを示しています。
署名付き 32 ビット フィールドの数学的間隔は JavaScript Date よりも狭いですが、コンバーターは数値を貼り付けるときにフィールド幅を検査しません。監査でソース タイプを保持します。ブラウザー変換が成功すると、ここでは表現可能性が実証されますが、ファームウェア、SQL 列、またはバイナリ プロトコルを他の場所で安全にラウンドトリップすることはできません。
コンバーターの日付範囲は既知です。外部 32 ビット制限はストレージ タイプによって異なります
カウントを JavaScript 日付に変換しても、何世紀も前にすべての場所で実際に印刷された暦が再構築されるわけではありません。実装ではプラットフォームの日付モデルを使用し、ISO 表現を返します。これには、歴史カレンダー セレクター、ロケール アーカイブ、カレンダー改革に関する文書ソースは含まれていません。これらの主張は意図的に省略されています。
最新のソフトウェア記録の場合、予期せぬマシン表現は依然として必要なコントラクトそのものである可能性があります。系図、法的歴史、またはアーカイブの転写については、元の書かれた日付とその暦のコンテキストを、派生した時代とともに保存します。便利な並べ替え可能な数値は、変換によって解決できない不確実性を消去するものであってはなりません。
カレンダー履歴の主張は、このコンバーターの証拠の外にあります
負はエポック軸上の方向であり、エラー カテゴリではありません。 ToolAcre はそれを解析し、大きさに基づいて同じ秒またはミリ秒のルールを適用し、結果にエポック以前としてフラグを付けます。この動作により、レビュー担当者は正当な古いインスタントを、他の場所にあるセンチネルまたは署名されていないストレージの障害と区別できるようになります。
1970 以前のデータを監査する場合は、符号を解釈する前に、単位、ソース タイプ、および欠損値の規則を示します。次に、ISO の結果を既知の記録と比較します。符号だけでも意味のある算術です。周囲のスキーマによって、プロデューサーがその算術演算を意図したか、制御値として同じ数値を使用したかが決まります。