Guide

タイムスタンプから ISO 8601 へのコンバーター (秒、ミリス、ナノ)

このページを作成する理由

多くの場合、タイムスタンプは秒 (10 桁)、ミリ秒 (13)、マイクロ秒 (16)、またはナノ秒 (19) 単位で取得されます。このページでは、ワンストップのルール、すぐに出荷できるスニペット、完全なコンバーターへの CTA が提供されるため、精度を推測することなく任意のエポックを ISO 8601 / RFC 3339 に変換できます。

クイック スタート (MVP フロー)

  1. タイムスタンプを貼り付けます (長さと精度は自動検出されます)。
  2. タイムゾーンを選択します: UTC またはカスタム オフセット (例: UTC+08:00)。
  3. ISO 8601 / RFC 3339 出力を取得し、ワンクリックでコピーします。
  4. 埋め込む必要がありますか?以下の言語スニペットをコピーします。

インタラクティブ ツール Timestamp → ISO Converter および Format Builder を試してください。

入力ルールと検証

  • 長さ検出: 10=秒、13=ms、16=μs、19=ns。
  • 使用できる文字: 数字のみ。空白と文字を拒否します。
  • 範囲: プラットフォームの安全な範囲内である必要があります (32 ビットと 64 ビットを確認してください。FAQ を参照)。
  • タイムゾーン: デフォルトの UTC。 +08:00-05:30 などのカスタム オフセット。
  • DST: 出力ではオフセット対応 ISO 8601 が使用されます。 UTC は DST の突然の影響を回避します。

コードスニペット

JavaScript / Node.js

const detectPrecision = (raw) => {
  const len = raw.length;
  if (len === 10) return { value: Number(raw) * 1000, unit: "ms" };
  if (len === 13) return { value: Number(raw), unit: "ms" };
  if (len === 16) return { value: Number(raw) / 1000, unit: "ms" }; // µs → ms
  if (len === 19) return { value: Number(raw) / 1_000_000, unit: "ms" }; // ns → ms
  throw new Error("Invalid length");
};

const toIso = (raw, tz = "UTC") => {
  const { value } = detectPrecision(raw);
  // If you need a fixed offset, use luxon or temporal; here we show UTC
  return new Date(value).toISOString(); // RFC 3339 compliant
};

console.log(toIso("1704067200"));      // 10 digits -> seconds
console.log(toIso("1704067200000"));   // 13 digits -> milliseconds

パイソン

from datetime import datetime, timezone, timedelta

def to_iso(raw: str, offset_minutes: int = 0) -> str:
    length = len(raw)
    if length == 10:
        ts = int(raw)
    elif length == 13:
        ts = int(raw) / 1000
    elif length == 16:
        ts = int(raw) / 1_000_000
    elif length == 19:
        ts = int(raw) / 1_000_000_000
    else:
        raise ValueError("Invalid length")

    tz = timezone(timedelta(minutes=offset_minutes))
    return datetime.fromtimestamp(ts, tz=tz).isoformat()

print(to_iso("1704067200", 0))     # UTC
print(to_iso("1704067200000", 480)) # UTC+08:00

### 行く

package main

import (
	"fmt"
	"time"
)

func parseEpoch(raw string) (time.Time, error) {
	switch len(raw) {
	case 10:
		sec, _ := time.ParseInt(raw, 10, 64)
		return time.Unix(sec, 0).UTC(), nil
	case 13:
		ms, _ := time.ParseInt(raw, 10, 64)
		return time.Unix(0, ms*int64(time.Millisecond)).UTC(), nil
	case 16:
		us, _ := time.ParseInt(raw, 10, 64)
		return time.Unix(0, us*int64(time.Microsecond)).UTC(), nil
	case 19:
		ns, _ := time.ParseInt(raw, 10, 64)
		return time.Unix(0, ns).UTC(), nil
	default:
		return time.Time{}, fmt.Errorf("invalid length")
	}
}

func main() {
	t, err := parseEpoch("1704067200000")
	if err != nil {
		panic(err)
	}
	fmt.Println(t.Format(time.RFC3339))
}

よくある落とし穴

  • 精度が間違っています: 13 桁の JS タイムスタンプは秒 = 巨大な将来の日付として扱われます。
  • オフセットがありません: タイムゾーンを指定せずにローカル解析すると、マシンのローカル時間が生成されます。
  • DST エッジ: 現地時間を表示する必要がある場合は、固定オフセットではなく実際の IANA ゾーン (例: 「America/New_York」) を選択します。
  • オーバーフロー: 32 ビット システムは、2038 年以降、第 2 レベルのタイムスタンプが壊れます。 64 ビットを推奨します。

よくある質問

  • Q: 秒とミリ秒、どうやって見分けるのですか? A: 桁の長さを確認してください。不明な場合は、両方を実行して、どちらが妥当な日付ウィンドウ内にあるかを確認してください。
  • Q: ISO 8601 には「Z」が必要ですか? A: 「Z」は UTC を意味します。 「+08:00」のようなオフセットも、ISO 8601 / RFC 3339 では有効です。
  • Q: バッチ変換できますか? A: バッチ タイムスタンプ コンバータ を使用します。

関連ツールとガイド