Guide
タイムスタンプから ISO 8601 へのコンバーター (秒、ミリス、ナノ)
このページを作成する理由
多くの場合、タイムスタンプは秒 (10 桁)、ミリ秒 (13)、マイクロ秒 (16)、またはナノ秒 (19) 単位で取得されます。このページでは、ワンストップのルール、すぐに出荷できるスニペット、完全なコンバーターへの CTA が提供されるため、精度を推測することなく任意のエポックを ISO 8601 / RFC 3339 に変換できます。
クイック スタート (MVP フロー)
- タイムスタンプを貼り付けます (長さと精度は自動検出されます)。
- タイムゾーンを選択します:
UTCまたはカスタム オフセット (例:UTC+08:00)。 - ISO 8601 / RFC 3339 出力を取得し、ワンクリックでコピーします。
- 埋め込む必要がありますか?以下の言語スニペットをコピーします。
インタラクティブ ツール 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: バッチ タイムスタンプ コンバータ を使用します。