时间戳资源

时间戳格式速查表:快速参考指南

概述

这份综合速查表为编程和数据交换中使用的所有常用时间戳格式提供快速参考。所有示例使用2024年1月1日 12:00:00 UTC作为参考时间。

快速参考表

格式示例长度使用场景
Unix秒170411040010位数字旧系统、API
Unix毫秒170411040000013位数字JavaScript、Java、现代API
Unix微秒170411040000000016位数字高精度日志
Unix纳秒170411040000000000019位数字性能监控
ISO 8601 (UTC)2024-01-01T12:00:00Z可变国际标准
ISO 8601 (时区)2024-01-01T12:00:00+00:00可变时区感知数据
RFC 33392024-01-01T12:00:00.000Z可变互联网时间戳
RFC 2822Mon, 01 Jan 2024 12:00:00 +0000可变邮件头
SQL DATETIME2024-01-01 12:00:0019字符数据库存储

Unix时间戳格式

秒(10位数字)

格式:自1970年1月1日 00:00:00 UTC以来的秒数整数

1704110400

何时使用:

  • 旧系统和API
  • 存储效率(int32为4字节)
  • 2038年问题考虑

代码示例:

// JavaScript
const timestamp = Math.floor(Date.now() / 1000);
// 1704110400

const date = new Date(timestamp * 1000);
// 2024-01-01T12:00:00.000Z
# Python
import time
timestamp = int(time.time())
# 1704110400

from datetime import datetime
date = datetime.fromtimestamp(timestamp)
# 2024-01-01 12:00:00
// PHP
$timestamp = time();
// 1704110400

$date = date('Y-m-d H:i:s', $timestamp);
// 2024-01-01 12:00:00
// Go
import "time"

timestamp := time.Now().Unix()
// 1704110400

date := time.Unix(timestamp, 0)
// 2024-01-01 12:00:00 +0000 UTC

毫秒(13位数字)

格式:自Unix纪元以来的毫秒数整数

1704110400000

何时使用:

  • JavaScript应用程序(Date.now()默认值)
  • 现代Web API
  • 需要毫秒精度

代码示例:

// JavaScript
const timestamp = Date.now();
// 1704110400000

const date = new Date(timestamp);
// 2024-01-01T12:00:00.000Z
# Python
import time
timestamp = int(time.time() * 1000)
# 1704110400000

from datetime import datetime
date = datetime.fromtimestamp(timestamp / 1000)
// Java
long timestamp = System.currentTimeMillis();
// 1704110400000

Date date = new Date(timestamp);
// Mon Jan 01 12:00:00 UTC 2024
// C#
long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
// 1704110400000

DateTimeOffset date = DateTimeOffset.FromUnixTimeMilliseconds(timestamp);

微秒(16位数字)

格式:自Unix纪元以来的微秒数整数

1704110400000000

何时使用:

  • 高精度日志和监控
  • 性能基准测试
  • 科学应用

代码示例:

# Python
import time
timestamp = int(time.time() * 1_000_000)
# 1704110400000000

date = datetime.fromtimestamp(timestamp / 1_000_000)
// Go
timestamp := time.Now().UnixMicro()
// 1704110400000000

date := time.UnixMicro(timestamp)
// Rust
use std::time::{SystemTime, UNIX_EPOCH};

let timestamp = SystemTime::now()
    .duration_since(UNIX_EPOCH)
    .unwrap()
    .as_micros();
// 1704110400000000

纳秒(19位数字)

格式:自Unix纪元以来的纳秒数整数

1704110400000000000

何时使用:

  • 超高精度时间要求
  • 性能分析
  • 交易系统

代码示例:

// Go
timestamp := time.Now().UnixNano()
// 1704110400000000000

date := time.Unix(0, timestamp)
// Rust
let timestamp = SystemTime::now()
    .duration_since(UNIX_EPOCH)
    .unwrap()
    .as_nanos();
// 1704110400000000000

ISO 8601格式

基本格式(UTC)

格式YYYY-MM-DDTHH:MM:SSZ

2024-01-01T12:00:00Z

何时使用:

  • 国际数据交换
  • RESTful API
  • JSON数据存储

代码示例:

// JavaScript
const isoString = new Date().toISOString();
// 2024-01-01T12:00:00.000Z
# Python
from datetime import datetime, timezone
iso_string = datetime.now(timezone.utc).isoformat().replace('+00:00', 'Z')
# 2024-01-01T12:00:00Z
// PHP
$iso_string = gmdate('Y-m-d\TH:i:s\Z');
// 2024-01-01T12:00:00Z

扩展格式(带毫秒)

格式YYYY-MM-DDTHH:MM:SS.sssZ

2024-01-01T12:00:00.000Z
// JavaScript (默认)
new Date().toISOString();
// 2024-01-01T12:00:00.000Z
# Python
datetime.now(timezone.utc).isoformat(timespec='milliseconds').replace('+00:00', 'Z')
# 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

代码示例:

// JavaScript
const date = new Date();
const offset = -date.getTimezoneOffset();
const sign = offset >= 0 ? '+' : '-';
const hours = String(Math.floor(Math.abs(offset) / 60)).padStart(2, '0');
const minutes = String(Math.abs(offset) % 60).padStart(2, '0');
const iso = date.toISOString().replace('Z', `${sign}${hours}:${minutes}`);
// 2024-01-01T12:00:00.000+00:00
# Python
datetime.now(timezone.utc).isoformat()
# 2024-01-01T12:00:00+00:00

# 使用特定时区
from datetime import timezone, timedelta
ist = timezone(timedelta(hours=5, minutes=30))
datetime.now(ist).isoformat()
# 2024-01-01T17:30:00+05:30

仅日期

格式YYYY-MM-DD

2024-01-01
// JavaScript
new Date().toISOString().split('T')[0];
// 2024-01-01
# Python
datetime.now().date().isoformat()
# 2024-01-01

仅时间

格式HH:MM:SSHH:MM:SS.sss

12:00:00
12:00:00.000
// JavaScript
new Date().toISOString().split('T')[1];
// 12:00:00.000Z
# Python
datetime.now().time().isoformat()
# 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的区别:

  • 始终包含毫秒
  • 始终包含时区
  • 更严格的规范

代码示例:

// JavaScript
new Date().toISOString(); // 已符合RFC 3339
// 2024-01-01T12:00:00.000Z
# Python
from datetime import datetime, timezone
datetime.now(timezone.utc).isoformat()
# 2024-01-01T12:00:00.000000+00:00
// Go
time.Now().UTC().Format(time.RFC3339Nano)
// 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源

代码示例:

// JavaScript
new Date().toUTCString();
// Mon, 01 Jan 2024 12:00:00 GMT
# Python
from email.utils import formatdate
formatdate(timeval=None, localtime=False, usegmt=True)
# Mon, 01 Jan 2024 12:00:00 GMT
// PHP
date('r');
// Mon, 01 Jan 2024 12:00:00 +0000

SQL时间戳格式

MySQL/MariaDB DATETIME

格式YYYY-MM-DD HH:MM:SS

2024-01-01 12:00:00
-- MySQL
SELECT NOW();
-- 2024-01-01 12:00:00

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
-- 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
-- PostgreSQL
SELECT NOW();
-- 2024-01-01 12:00:00.000000+00

SELECT CURRENT_TIMESTAMP;
-- 2024-01-01 12:00:00.000000+00

SQLite DATETIME

格式YYYY-MM-DD HH:MM:SS(存储为文本)

2024-01-01 12:00:00
-- SQLite
SELECT datetime('now');
-- 2024-01-01 12:00:00

SELECT strftime('%Y-%m-%d %H:%M:%S', 'now');
-- 2024-01-01 12:00:00

Microsoft SQL Server

格式YYYY-MM-DD HH:MM:SS.sss

2024-01-01 12:00:00.000
-- SQL Server
SELECT GETUTCDATE();
-- 2024-01-01 12:00:00.000

SELECT FORMAT(GETUTCDATE(), 'yyyy-MM-dd HH:mm:ss.fff');
-- 2024-01-01 12:00:00.000

特定语言格式

JavaScript

// 各种格式
const date = new Date();

// ISO 8601
date.toISOString();                    // 2024-01-01T12:00:00.000Z

// 本地字符串
date.toLocaleString();                  // 1/1/2024, 12:00:00 PM

// UTC字符串
date.toUTCString();                     // Mon, 01 Jan 2024 12:00:00 GMT

// 仅日期
date.toLocaleDateString();              // 1/1/2024

// 仅时间
date.toLocaleTimeString();              // 12:00:00 PM

// 自定义格式
date.toLocaleString('zh-CN', {
  year: 'numeric',
  month: '2-digit',
  day: '2-digit',
  hour: '2-digit',
  minute: '2-digit',
  second: '2-digit',
  hour12: false
});
// 2024/01/01 12:00:00

Python strftime代码

from datetime import datetime

dt = datetime(2024, 1, 1, 12, 0, 0)

# 常用格式
dt.strftime('%Y-%m-%d')                 # 2024-01-01
dt.strftime('%Y-%m-%d %H:%M:%S')       # 2024-01-01 12:00:00
dt.strftime('%Y-%m-%dT%H:%M:%SZ')      # 2024-01-01T12:00:00Z
dt.strftime('%d/%m/%Y')                 # 01/01/2024
dt.strftime('%m/%d/%Y')                 # 01/01/2024
dt.strftime('%B %d, %Y')                # January 01, 2024
dt.strftime('%A, %B %d, %Y')           # Monday, January 01, 2024
dt.strftime('%I:%M %p')                 # 12:00 PM

PHP date()格式

<?php
$timestamp = 1704110400;

// 常用格式
date('Y-m-d', $timestamp);              // 2024-01-01
date('Y-m-d H:i:s', $timestamp);       // 2024-01-01 12:00:00
date('c', $timestamp);                  // 2024-01-01T12:00:00+00:00 (ISO 8601)
date('r', $timestamp);                  // Mon, 01 Jan 2024 12:00:00 +0000 (RFC 2822)
date('U', $timestamp);                  // 1704110400 (Unix时间戳)
date('d/m/Y', $timestamp);              // 01/01/2024
date('m/d/Y', $timestamp);              // 01/01/2024
date('F j, Y', $timestamp);             // January 1, 2024
date('l, F j, Y', $timestamp);         // Monday, January 1, 2024
date('g:i A', $timestamp);              // 12:00 PM

Go时间格式

package main

import (
    "time"
)

func main() {
    t := time.Date(2024, 1, 1, 12, 0, 0, 0, time.UTC)

    // 标准格式
    t.Format(time.RFC3339)              // 2024-01-01T12:00:00Z
    t.Format(time.RFC3339Nano)          // 2024-01-01T12:00:00.000000000Z
    t.Format(time.RFC822)               // 01 Jan 24 12:00 UTC
    t.Format(time.RFC1123)              // Mon, 01 Jan 2024 12:00:00 UTC

    // 自定义格式(使用参考时间:Jan 2 15:04:05 2006 MST)
    t.Format("2006-01-02")              // 2024-01-01
    t.Format("2006-01-02 15:04:05")    // 2024-01-01 12:00:00
    t.Format("01/02/2006")              // 01/01/2024
    t.Format("January 2, 2006")         // January 1, 2024
    t.Format("3:04 PM")                 // 12:00 PM
}

Java SimpleDateFormat

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

Date date = new Date(1704110400000L);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

// 常用模式
"yyyy-MM-dd"                            // 2024-01-01
"yyyy-MM-dd HH:mm:ss"                  // 2024-01-01 12:00:00
"yyyy-MM-dd'T'HH:mm:ss'Z'"            // 2024-01-01T12:00:00Z
"dd/MM/yyyy"                            // 01/01/2024
"MM/dd/yyyy"                            // 01/01/2024
"MMMM d, yyyy"                          // January 1, 2024
"EEEE, MMMM d, yyyy"                   // Monday, January 1, 2024
"h:mm a"                                // 12:00 PM

格式转换快速参考

Unix → ISO 8601

// JavaScript
new Date(1704110400000).toISOString();
// 2024-01-01T12:00:00.000Z
# Python
from datetime import datetime, timezone
datetime.fromtimestamp(1704110400, timezone.utc).isoformat()
# 2024-01-01T12:00:00+00:00

ISO 8601 → Unix

// JavaScript
new Date('2024-01-01T12:00:00Z').getTime();
// 1704110400000
# Python
from datetime import datetime
datetime.fromisoformat('2024-01-01T12:00:00+00:00').timestamp()
# 1704110400.0

RFC 2822 → ISO 8601

// JavaScript
new Date('Mon, 01 Jan 2024 12:00:00 GMT').toISOString();
// 2024-01-01T12:00:00.000Z
# Python
from email.utils import parsedate_to_datetime
parsedate_to_datetime('Mon, 01 Jan 2024 12:00:00 GMT').isoformat()
# 2024-01-01T12:00:00+00:00

最佳实践

存储建议

  1. 数据库:使用原生TIMESTAMP类型并支持时区
  2. API:使用带时区的ISO 8601以保证可移植性
  3. 内部处理:使用Unix毫秒进行计算
  4. 日志记录:使用带毫秒和时区的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位整数

相关工具

相关指南