概述
这份综合速查表为编程和数据交换中使用的所有常用时间戳格式提供快速参考。所有示例使用2024年1月1日 12:00:00 UTC作为参考时间。
快速参考表
| 格式 | 示例 | 长度 | 使用场景 |
|---|---|---|---|
| Unix秒 | 1704110400 | 10位数字 | 旧系统、API |
| Unix毫秒 | 1704110400000 | 13位数字 | JavaScript、Java、现代API |
| Unix微秒 | 1704110400000000 | 16位数字 | 高精度日志 |
| Unix纳秒 | 1704110400000000000 | 19位数字 | 性能监控 |
| ISO 8601 (UTC) | 2024-01-01T12:00:00Z | 可变 | 国际标准 |
| ISO 8601 (时区) | 2024-01-01T12:00:00+00:00 | 可变 | 时区感知数据 |
| RFC 3339 | 2024-01-01T12:00:00.000Z | 可变 | 互联网时间戳 |
| RFC 2822 | Mon, 01 Jan 2024 12:00:00 +0000 | 可变 | 邮件头 |
| SQL DATETIME | 2024-01-01 12:00:00 | 19字符 | 数据库存储 |
Unix时间戳格式
秒(10位数字)
格式:自1970年1月1日 00:00:00 UTC以来的秒数整数
1704110400
何时使用:
- 旧系统和API
- 存储效率(int32为4字节)
- 2038年问题考虑
代码示例:
JAVASCRIPT1// JavaScript 2const timestamp = Math.floor(Date.now() / 1000); 3// 1704110400 4 5const date = new Date(timestamp * 1000); 6// 2024-01-01T12:00:00.000Z
PYTHON1# Python 2import time 3timestamp = int(time.time()) 4# 1704110400 5 6from datetime import datetime 7date = datetime.fromtimestamp(timestamp) 8# 2024-01-01 12:00:00
PHP1// PHP 2$timestamp = time(); 3// 1704110400 4 5$date = date('Y-m-d H:i:s', $timestamp); 6// 2024-01-01 12:00:00
GO1// Go 2import "time" 3 4timestamp := time.Now().Unix() 5// 1704110400 6 7date := time.Unix(timestamp, 0) 8// 2024-01-01 12:00:00 +0000 UTC
毫秒(13位数字)
格式:自Unix纪元以来的毫秒数整数
1704110400000
何时使用:
- JavaScript应用程序(
Date.now()默认值) - 现代Web API
- 需要毫秒精度
代码示例:
JAVASCRIPT1// JavaScript 2const timestamp = Date.now(); 3// 1704110400000 4 5const date = new Date(timestamp); 6// 2024-01-01T12:00:00.000Z
PYTHON1# Python 2import time 3timestamp = int(time.time() * 1000) 4# 1704110400000 5 6from datetime import datetime 7date = datetime.fromtimestamp(timestamp / 1000)
JAVA1// Java 2long timestamp = System.currentTimeMillis(); 3// 1704110400000 4 5Date date = new Date(timestamp); 6// Mon Jan 01 12:00:00 UTC 2024
CSHARP1// C# 2long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); 3// 1704110400000 4 5DateTimeOffset date = DateTimeOffset.FromUnixTimeMilliseconds(timestamp);
微秒(16位数字)
格式:自Unix纪元以来的微秒数整数
1704110400000000
何时使用:
- 高精度日志和监控
- 性能基准测试
- 科学应用
代码示例:
PYTHON1# Python 2import time 3timestamp = int(time.time() * 1_000_000) 4# 1704110400000000 5 6date = datetime.fromtimestamp(timestamp / 1_000_000)
GO1// Go 2timestamp := time.Now().UnixMicro() 3// 1704110400000000 4 5date := time.UnixMicro(timestamp)
RUST1// Rust 2use std::time::{SystemTime, UNIX_EPOCH}; 3 4let timestamp = SystemTime::now() 5 .duration_since(UNIX_EPOCH) 6 .unwrap() 7 .as_micros(); 8// 1704110400000000
纳秒(19位数字)
格式:自Unix纪元以来的纳秒数整数
1704110400000000000
何时使用:
- 超高精度时间要求
- 性能分析
- 交易系统
代码示例:
GO1// Go 2timestamp := time.Now().UnixNano() 3// 1704110400000000000 4 5date := time.Unix(0, timestamp)
RUST1// Rust 2let timestamp = SystemTime::now() 3 .duration_since(UNIX_EPOCH) 4 .unwrap() 5 .as_nanos(); 6// 1704110400000000000
ISO 8601格式
基本格式(UTC)
格式:YYYY-MM-DDTHH:MM:SSZ
2024-01-01T12:00:00Z
何时使用:
- 国际数据交换
- RESTful API
- JSON数据存储
代码示例:
JAVASCRIPT1// JavaScript 2const isoString = new Date().toISOString(); 3// 2024-01-01T12:00:00.000Z
PYTHON1# Python 2from datetime import datetime, timezone 3iso_string = datetime.now(timezone.utc).isoformat().replace('+00:00', 'Z') 4# 2024-01-01T12:00:00Z
PHP1// PHP 2$iso_string = gmdate('Y-m-d\TH:i:s\Z'); 3// 2024-01-01T12:00:00Z
扩展格式(带毫秒)
格式:YYYY-MM-DDTHH:MM:SS.sssZ
2024-01-01T12:00:00.000Z
JAVASCRIPT1// JavaScript (默认) 2new Date().toISOString(); 3// 2024-01-01T12:00:00.000Z
PYTHON1# Python 2datetime.now(timezone.utc).isoformat(timespec='milliseconds').replace('+00:00', 'Z') 3# 2024-01-01T12:00:00.000Z
带时区偏移
格式:YYYY-MM-DDTHH:MM:SS±HH:MM
2024-01-01T12:00:00+00:00
2024-01-01T17:30:00+05:30 # IST
2024-01-01T07:00:00-05:00 # EST
代码示例:
JAVASCRIPT1// JavaScript 2const date = new Date(); 3const offset = -date.getTimezoneOffset(); 4const sign = offset >= 0 ? '+' : '-'; 5const hours = String(Math.floor(Math.abs(offset) / 60)).padStart(2, '0'); 6const minutes = String(Math.abs(offset) % 60).padStart(2, '0'); 7const iso = date.toISOString().replace('Z', `${sign}${hours}:${minutes}`); 8// 2024-01-01T12:00:00.000+00:00
PYTHON1# Python 2datetime.now(timezone.utc).isoformat() 3# 2024-01-01T12:00:00+00:00 4 5# 使用特定时区 6from datetime import timezone, timedelta 7ist = timezone(timedelta(hours=5, minutes=30)) 8datetime.now(ist).isoformat() 9# 2024-01-01T17:30:00+05:30
仅日期
格式:YYYY-MM-DD
2024-01-01
JAVASCRIPT1// JavaScript 2new Date().toISOString().split('T')[0]; 3// 2024-01-01
PYTHON1# Python 2datetime.now().date().isoformat() 3# 2024-01-01
仅时间
格式:HH:MM:SS 或 HH:MM:SS.sss
12:00:00
12:00:00.000
JAVASCRIPT1// JavaScript 2new Date().toISOString().split('T')[1]; 3// 12:00:00.000Z
PYTHON1# Python 2datetime.now().time().isoformat() 3# 12:00:00.000000
RFC 3339格式
格式:YYYY-MM-DDTHH:MM:SS.sss±HH:MM 或 ...Z
2024-01-01T12:00:00.000Z
2024-01-01T12:00:00.000+00:00
与ISO 8601的区别:
- 始终包含毫秒
- 始终包含时区
- 更严格的规范
代码示例:
JAVASCRIPT1// JavaScript 2new Date().toISOString(); // 已符合RFC 3339 3// 2024-01-01T12:00:00.000Z
PYTHON1# Python 2from datetime import datetime, timezone 3datetime.now(timezone.utc).isoformat() 4# 2024-01-01T12:00:00.000000+00:00
GO1// Go 2time.Now().UTC().Format(time.RFC3339Nano) 3// 2024-01-01T12:00:00.000000000Z
RFC 2822格式
格式:Day, DD Mon YYYY HH:MM:SS ±HHMM
Mon, 01 Jan 2024 12:00:00 +0000
Mon, 01 Jan 2024 12:00:00 GMT
何时使用:
- 邮件头(Date字段)
- HTTP头
- RSS源
代码示例:
JAVASCRIPT1// JavaScript 2new Date().toUTCString(); 3// Mon, 01 Jan 2024 12:00:00 GMT
PYTHON1# Python 2from email.utils import formatdate 3formatdate(timeval=None, localtime=False, usegmt=True) 4# Mon, 01 Jan 2024 12:00:00 GMT
PHP1// PHP 2date('r'); 3// Mon, 01 Jan 2024 12:00:00 +0000
SQL时间戳格式
MySQL/MariaDB DATETIME
格式:YYYY-MM-DD HH:MM:SS
2024-01-01 12:00:00
SQL1-- MySQL 2SELECT NOW(); 3-- 2024-01-01 12:00:00 4 5SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); 6-- 2024-01-01 12:00:00
PostgreSQL TIMESTAMP
格式:YYYY-MM-DD HH:MM:SS.ssssss±TZ
2024-01-01 12:00:00.000000+00
2024-01-01 12:00:00+00
SQL1-- PostgreSQL 2SELECT NOW(); 3-- 2024-01-01 12:00:00.000000+00 4 5SELECT CURRENT_TIMESTAMP; 6-- 2024-01-01 12:00:00.000000+00
SQLite DATETIME
格式:YYYY-MM-DD HH:MM:SS(存储为文本)
2024-01-01 12:00:00
SQL1-- SQLite 2SELECT datetime('now'); 3-- 2024-01-01 12:00:00 4 5SELECT strftime('%Y-%m-%d %H:%M:%S', 'now'); 6-- 2024-01-01 12:00:00
Microsoft SQL Server
格式:YYYY-MM-DD HH:MM:SS.sss
2024-01-01 12:00:00.000
SQL1-- SQL Server 2SELECT GETUTCDATE(); 3-- 2024-01-01 12:00:00.000 4 5SELECT FORMAT(GETUTCDATE(), 'yyyy-MM-dd HH:mm:ss.fff'); 6-- 2024-01-01 12:00:00.000
特定语言格式
JavaScript
JAVASCRIPT1// 各种格式 2const date = new Date(); 3 4// ISO 8601 5date.toISOString(); // 2024-01-01T12:00:00.000Z 6 7// 本地字符串 8date.toLocaleString(); // 1/1/2024, 12:00:00 PM 9 10// UTC字符串 11date.toUTCString(); // Mon, 01 Jan 2024 12:00:00 GMT 12 13// 仅日期 14date.toLocaleDateString(); // 1/1/2024 15 16// 仅时间 17date.toLocaleTimeString(); // 12:00:00 PM 18 19// 自定义格式 20date.toLocaleString('zh-CN', { 21 year: 'numeric', 22 month: '2-digit', 23 day: '2-digit', 24 hour: '2-digit', 25 minute: '2-digit', 26 second: '2-digit', 27 hour12: false 28}); 29// 2024/01/01 12:00:00
Python strftime代码
PYTHON1from datetime import datetime 2 3dt = datetime(2024, 1, 1, 12, 0, 0) 4 5# 常用格式 6dt.strftime('%Y-%m-%d') # 2024-01-01 7dt.strftime('%Y-%m-%d %H:%M:%S') # 2024-01-01 12:00:00 8dt.strftime('%Y-%m-%dT%H:%M:%SZ') # 2024-01-01T12:00:00Z 9dt.strftime('%d/%m/%Y') # 01/01/2024 10dt.strftime('%m/%d/%Y') # 01/01/2024 11dt.strftime('%B %d, %Y') # January 01, 2024 12dt.strftime('%A, %B %d, %Y') # Monday, January 01, 2024 13dt.strftime('%I:%M %p') # 12:00 PM
PHP date()格式
PHP1<?php 2$timestamp = 1704110400; 3 4// 常用格式 5date('Y-m-d', $timestamp); // 2024-01-01 6date('Y-m-d H:i:s', $timestamp); // 2024-01-01 12:00:00 7date('c', $timestamp); // 2024-01-01T12:00:00+00:00 (ISO 8601) 8date('r', $timestamp); // Mon, 01 Jan 2024 12:00:00 +0000 (RFC 2822) 9date('U', $timestamp); // 1704110400 (Unix时间戳) 10date('d/m/Y', $timestamp); // 01/01/2024 11date('m/d/Y', $timestamp); // 01/01/2024 12date('F j, Y', $timestamp); // January 1, 2024 13date('l, F j, Y', $timestamp); // Monday, January 1, 2024 14date('g:i A', $timestamp); // 12:00 PM
Go时间格式
GO1package main 2 3import ( 4 "time" 5) 6 7func main() { 8 t := time.Date(2024, 1, 1, 12, 0, 0, 0, time.UTC) 9 10 // 标准格式 11 t.Format(time.RFC3339) // 2024-01-01T12:00:00Z 12 t.Format(time.RFC3339Nano) // 2024-01-01T12:00:00.000000000Z 13 t.Format(time.RFC822) // 01 Jan 24 12:00 UTC 14 t.Format(time.RFC1123) // Mon, 01 Jan 2024 12:00:00 UTC 15 16 // 自定义格式(使用参考时间:Jan 2 15:04:05 2006 MST) 17 t.Format("2006-01-02") // 2024-01-01 18 t.Format("2006-01-02 15:04:05") // 2024-01-01 12:00:00 19 t.Format("01/02/2006") // 01/01/2024 20 t.Format("January 2, 2006") // January 1, 2024 21 t.Format("3:04 PM") // 12:00 PM 22}
Java SimpleDateFormat
JAVA1import java.text.SimpleDateFormat; 2import java.util.Date; 3import java.util.TimeZone; 4 5Date date = new Date(1704110400000L); 6SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); 7sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 8 9// 常用模式 10"yyyy-MM-dd" // 2024-01-01 11"yyyy-MM-dd HH:mm:ss" // 2024-01-01 12:00:00 12"yyyy-MM-dd'T'HH:mm:ss'Z'" // 2024-01-01T12:00:00Z 13"dd/MM/yyyy" // 01/01/2024 14"MM/dd/yyyy" // 01/01/2024 15"MMMM d, yyyy" // January 1, 2024 16"EEEE, MMMM d, yyyy" // Monday, January 1, 2024 17"h:mm a" // 12:00 PM
格式转换快速参考
Unix → ISO 8601
JAVASCRIPT1// JavaScript 2new Date(1704110400000).toISOString(); 3// 2024-01-01T12:00:00.000Z
PYTHON1# Python 2from datetime import datetime, timezone 3datetime.fromtimestamp(1704110400, timezone.utc).isoformat() 4# 2024-01-01T12:00:00+00:00
ISO 8601 → Unix
JAVASCRIPT1// JavaScript 2new Date('2024-01-01T12:00:00Z').getTime(); 3// 1704110400000
PYTHON1# Python 2from datetime import datetime 3datetime.fromisoformat('2024-01-01T12:00:00+00:00').timestamp() 4# 1704110400.0
RFC 2822 → ISO 8601
JAVASCRIPT1// JavaScript 2new Date('Mon, 01 Jan 2024 12:00:00 GMT').toISOString(); 3// 2024-01-01T12:00:00.000Z
PYTHON1# Python 2from email.utils import parsedate_to_datetime 3parsedate_to_datetime('Mon, 01 Jan 2024 12:00:00 GMT').isoformat() 4# 2024-01-01T12:00:00+00:00
最佳实践
存储建议
- 数据库:使用原生TIMESTAMP类型并支持时区
- API:使用带时区的ISO 8601以保证可移植性
- 内部处理:使用Unix毫秒进行计算
- 日志记录:使用带毫秒和时区的ISO 8601
时区处理
- 始终包含时区 - 避免歧义时间戳
- 以UTC存储 - 仅在显示时转换为本地时间
- 使用Z表示UTC - 比+00:00更清晰
- 验证时区偏移 - 确保在-12:00到+14:00范围内
精度选择
| 精度 | 使用场景 | 示例 |
|---|---|---|
| 秒 | 用户事件、调度 | 1704110400 |
| 毫秒 | Web应用、通用日志 | 1704110400000 |
| 微秒 | 性能监控 | 1704110400000000 |
| 纳秒 | 高频交易 | 1704110400000000000 |
常见陷阱
❌ 避免:
- 存储没有时区信息的时间戳
- 使用本地时间存储(始终使用UTC)
- 混用不同精度级别
- 硬编码时区偏移
- 使用32位整数(2038年问题)
✅ 应该:
- 始终包含时区指示符(Z或±HH:MM)
- 以UTC存储,仅在显示时转换为本地时间
- 在整个系统中使用一致的精度
- 使用时区感知的datetime对象
- 对Unix时间戳使用64位整数
相关工具
- Unix时间戳转换器 - 在格式之间转换
- 时间戳格式构建器 - 创建自定义格式
- 时区转换器 - 处理时区转换
- 批量时间戳转换器 - 转换多个时间戳