Guide

無効なタイムスタンプ: 迅速な診断と修正

簡単な診断チェックリスト

  • 長さを確認します: 10=秒、13=ミリ秒、16=μ秒、19=ナノ秒。
  • 数字をチェック: 数字のみ。スペース/文字を削除します。
  • 範囲を確認してください: 結果の日付は妥当であり、64 ビットは安全ですか?
  • タイムゾーン をチェックします。まず UTC で変換してから、ターゲット オフセットを適用します。
  • DST エッジ をチェックします。ローカライズする場合は、IANA ゾーン (America/New_York) を使用します。

今すぐ確認する必要がありますか? Unix タイムスタンプ コンバータ または バッチ コンバータ にジャンプします。

一般的なエラーの種類

  • 長さの不一致: 13 桁が秒として扱われる → 遠い未来の日付。
  • 数字以外の文字: 隠しスペース、カンマ、または文字。
  • 範囲外: 2038 を超えると 32 ビット秒がオーバーフローします。一部のシステムではネガはサポートされていません。
  • タイムゾーンの曖昧さ: サーバーの現地時間と予想される UTC。
  • DST のシフト: 欠落している時間に現地時間に解析すると失敗します。

検証手順 (コピー&ペースト)

// JavaScript: validate & normalize to milliseconds
export function normalizeEpoch(raw) {
  const trimmed = raw.trim();
  if (!/^[0-9]+$/.test(trimmed)) throw new Error("Digits only");
  const len = trimmed.length;
  if (len === 10) return Number(trimmed) * 1000;
  if (len === 13) return Number(trimmed);
  if (len === 16) return Number(trimmed) / 1000;
  if (len === 19) return Number(trimmed) / 1_000_000;
  throw new Error("Invalid length");
}
# Python: validate & to datetime (UTC)
from datetime import datetime, timezone

def parse_epoch(raw: str) -> datetime:
    if not raw.isdigit():
        raise ValueError("Digits only")
    n = len(raw)
    if n == 10:
        ts = int(raw)
    elif n == 13:
        ts = int(raw) / 1000
    elif n == 16:
        ts = int(raw) / 1_000_000
    elif n == 19:
        ts = int(raw) / 1_000_000_000
    else:
        raise ValueError("Invalid length")
    return datetime.fromtimestamp(ts, tz=timezone.utc)
-- SQL (PostgreSQL): validate timestamp length in a table
SELECT id, ts_raw,
       CASE
         WHEN ts_raw ~ '^[0-9]{10}$' THEN 'seconds'
         WHEN ts_raw ~ '^[0-9]{13}$' THEN 'milliseconds'
         WHEN ts_raw ~ '^[0-9]{16}$' THEN 'microseconds'
         WHEN ts_raw ~ '^[0-9]{19}$' THEN 'nanoseconds'
         ELSE 'invalid'
       END AS ts_precision
FROM events
WHERE ts_raw !~ '^[0-9]{10}$'
   OR ts_raw::numeric > 32503680000; -- > 3000-01-01 as a sanity bound

テンプレートを修正する

  • 精度修正: 長さを検出 → ミリ秒にスケール → 解析を再実行。
  • トリミング/サニタイズ: 正規表現検証の前に空白とカンマを削除します。
  • 範囲ガード: 妥当な範囲外の値を制限または破棄します (例: 年 < 2000 または > 2100)。
  • タイムゾーン修正: UTC として解析し、ユーザーのターゲット オフセット/ゾーンにフォーマットします。
  • DST セーフな解析: UTC を優先します。ローカルが必要な場合は、IANA ゾーン ライブラリを使用します。

よくある質問

  • 最も安全なデフォルトは何ですか? UTC として解析し、要求されたタイムゾーンにフォーマットします。
  • 2038 問題を防ぐにはどうすればよいですか? 64 ビット整数として保存します。 32 ビット秒ベースのストレージは避けてください。
  • データをバッチでクリーンアップするにはどうすればよいですか? 正規表現プレフィルター + 長さに基づくスケーリングを使用して、コンバーターにパイプします。 バッチ タイムスタンプ コンバータ を試してください。

関連ツールとガイド