为什么要有这一页
开发和运营常拿到 10/13/16/19 位的时间戳,不确定精度、也不清楚时区。这里提供一页式规则、代码片段与 CTA,到底层工具一步到位。
快速使用(MVP 流程)
- 粘贴时间戳(自动按位数识别精度)。
- 选择时区:
UTC或自定义偏移(如UTC+08:00)。 - 输出 ISO 8601 / RFC 3339,一键复制。
- 需要嵌入代码?下方各语言片段即可。
立即体验:Timestamp → ISO Converter 与 Format Builder。
输入规则与校验
- 位数即精度:10=秒,13=毫秒,16=微秒,19=纳秒。
- 字符限制:仅数字;剔除空格和字母。
- 范围:注意 32 位秒级时间戳 2038 溢出;使用 64 位更安全。
- 时区:默认 UTC;支持
+08:00、-05:30等。 - DST:建议用 UTC 避免夏令时影响;若需本地显示,用 IANA 时区名。
代码片段
JavaScript / Node.js
JAVASCRIPT1const detectPrecision = (raw) => { 2 const len = raw.length; 3 if (len === 10) return { value: Number(raw) * 1000, unit: "ms" }; 4 if (len === 13) return { value: Number(raw), unit: "ms" }; 5 if (len === 16) return { value: Number(raw) / 1000, unit: "ms" }; // µs -> ms 6 if (len === 19) return { value: Number(raw) / 1_000_000, unit: "ms" }; // ns -> ms 7 throw new Error("长度不合法"); 8}; 9 10const toIso = (raw, tz = "UTC") => { 11 const { value } = detectPrecision(raw); 12 // 若需固定偏移或 IANA 时区,可用 luxon/temporal,这里先返回 UTC 13 return new Date(value).toISOString(); 14}; 15 16console.log(toIso("1704067200")); 17console.log(toIso("1704067200000"));
Python
PYTHON1from datetime import datetime, timezone, timedelta 2 3def to_iso(raw: str, offset_minutes: int = 0) -> str: 4 n = len(raw) 5 if n == 10: 6 ts = int(raw) 7 elif n == 13: 8 ts = int(raw) / 1000 9 elif n == 16: 10 ts = int(raw) / 1_000_000 11 elif n == 19: 12 ts = int(raw) / 1_000_000_000 13 else: 14 raise ValueError("长度不合法") 15 tz = timezone(timedelta(minutes=offset_minutes)) 16 return datetime.fromtimestamp(ts, tz=tz).isoformat()
Go
GO1package main 2 3import ( 4 "fmt" 5 "time" 6) 7 8func parseEpoch(raw string) (time.Time, error) { 9 switch len(raw) { 10 case 10: 11 sec, _ := time.ParseInt(raw, 10, 64) 12 return time.Unix(sec, 0).UTC(), nil 13 case 13: 14 ms, _ := time.ParseInt(raw, 10, 64) 15 return time.Unix(0, ms*int64(time.Millisecond)).UTC(), nil 16 case 16: 17 us, _ := time.ParseInt(raw, 10, 64) 18 return time.Unix(0, us*int64(time.Microsecond)).UTC(), nil 19 case 19: 20 ns, _ := time.ParseInt(raw, 10, 64) 21 return time.Unix(0, ns).UTC(), nil 22 default: 23 return time.Time{}, fmt.Errorf("长度不合法") 24 } 25} 26 27func main() { 28 t, _ := parseEpoch("1704067200000") 29 fmt.Println(t.Format(time.RFC3339)) 30}
常见坑
- 精度误判:13 位当成秒会得到荒诞的未来日期。
- 缺少时区:默认本地解析会跟随服务器/浏览器时区。
- DST 边界:需要本地化时用 IANA 时区名(如
America/New_York),不要只用偏移。 - 溢出:32 位秒级时间戳 2038 会溢出;改用 64 位。
FAQ
- Q: 不确定是秒还是毫秒?
A: 看位数;若不确定,可在工具里试两种输出,选择落在合理时间范围的结果。 - Q: ISO 8601 必须带 Z 吗?
A:Z代表 UTC,带偏移+08:00也是合法的 ISO 8601 / RFC 3339。 - Q: 想批量转换?
A: 用 Batch Timestamp Converter。