毫秒时间戳转换教程
深入了解13位毫秒级时间戳的转换方法,包含各编程语言的实现代码。
当前毫秒时间戳
0
秒级时间戳:0
应用场景
日志记录
记录精确到毫秒的事件发生时间,便于问题排查和性能分析
2025-01-01T00:00:00.123Z → 1735660800123性能测试
测量代码执行时间,毫秒级精度可以更准确地评估性能
耗时: 123msAPI签名
防止重放攻击,API请求需要包含精确的时间戳
timestamp=1735660800123&sign=xxx数据同步
增量同步数据时,使用毫秒时间戳标记数据变更时间
WHERE updated_at > 1735660800123什么是毫秒时间戳?
text
毫秒时间戳是Unix时间戳的毫秒级精度版本:
秒级时间戳(10位):1735660800
毫秒级时间戳(13位):1735660800000
换算关系:
毫秒时间戳 = 秒时间戳 × 1000
秒时间戳 = Math.floor(毫秒时间戳 ÷ 1000)
为什么使用毫秒时间戳?
1. 更高的时间精度,适合需要精确到毫秒的场景
2. JavaScript、Java等语言默认使用毫秒
3. 日志记录、性能测试等需要精确时间JavaScript 毫秒时间戳
JavaScript
// 获取当前毫秒时间戳
const ms = Date.now();
console.log(ms); // 1735660800000
// 或使用 new Date()
const ms2 = new Date().getTime();
const ms3 = new Date().valueOf();
// 毫秒时间戳转日期
const date = new Date(1735660800000);
console.log(date.toLocaleString()); // 2025/1/1 00:00:00
// 日期转毫秒时间戳
const ms4 = new Date('2025-01-01 00:00:00').getTime();
console.log(ms4); // 1735660800000
// 毫秒时间戳转秒时间戳
const sec = Math.floor(Date.now() / 1000);
// 秒时间戳转毫秒时间戳
const msFromSec = sec * 1000;Python 毫秒时间戳
Python
import time
from datetime import datetime
# 获取当前毫秒时间戳
ms = int(time.time() * 1000)
print(ms) # 1735660800000
# 毫秒时间戳转日期
timestamp_ms = 1735660800000
date = datetime.fromtimestamp(timestamp_ms / 1000)
print(date.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
# 日期转毫秒时间戳
dt = datetime(2025, 1, 1, 0, 0, 0)
ms = int(dt.timestamp() * 1000)
print(ms) # 1735660800000
# 解析带毫秒的日期字符串
dt_str = '2025-01-01 00:00:00.123'
dt = datetime.strptime(dt_str, '%Y-%m-%d %H:%M:%S.%f')
ms = int(dt.timestamp() * 1000)Java 毫秒时间戳
Java
// 获取当前毫秒时间戳
long ms = System.currentTimeMillis();
System.out.println(ms); // 1735660800000
// 使用Instant
import java.time.Instant;
long ms2 = Instant.now().toEpochMilli();
// 毫秒时间戳转日期时间
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
long ms = 1735660800000L;
LocalDateTime dateTime = LocalDateTime.ofInstant(
Instant.ofEpochMilli(ms),
ZoneId.systemDefault()
);
System.out.println(dateTime); // 2025-01-01T00:00:00
// 日期时间转毫秒时间戳
LocalDateTime dt = LocalDateTime.of(2025, 1, 1, 0, 0, 0);
long ms3 = dt.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();MySQL 毫秒时间戳
SQL
-- 获取当前毫秒时间戳
SELECT ROUND(UNIX_TIMESTAMP(NOW(3)) * 1000) as ms_timestamp;
-- 结果: 1735660800000
-- 存储毫秒时间戳的表设计
CREATE TABLE events (
id INT AUTO_INCREMENT PRIMARY KEY,
event_name VARCHAR(100),
created_at BIGINT UNSIGNED, -- 存储毫秒时间戳
INDEX idx_created (created_at)
);
-- 插入数据(毫秒时间戳)
INSERT INTO events (event_name, created_at)
VALUES ('click', ROUND(UNIX_TIMESTAMP(NOW(3)) * 1000));
-- 毫秒时间戳转日期
SELECT FROM_UNIXTIME(created_at / 1000) as datetime
FROM events;
-- 带毫秒精度显示
SELECT FROM_UNIXTIME(created_at / 1000, '%Y-%m-%d %H:%i:%s.%f') as datetime_ms
FROM events;
-- 查询最近1小时的数据
SELECT * FROM events
WHERE created_at >= (UNIX_TIMESTAMP(NOW(3)) - 3600) * 1000;时间戳精度转换
text
秒级与毫秒级时间戳互转:
【秒 → 毫秒】
乘以 1000
1735660800 → 1735660800000
【毫秒 → 秒】
除以 1000(取整)
1735660800000 → 1735660800
【JavaScript】
秒 → 毫秒: timestampSec * 1000
毫秒 → 秒: Math.floor(timestampMs / 1000)
【Python】
秒 → 毫秒: int(timestampSec * 1000)
毫秒 → 秒: timestampMs // 1000
【Java】
秒 → 毫秒: timestampSec * 1000L
毫秒 → 秒: timestampMs / 1000
【注意事项】
- 转换时注意整数溢出问题
- 毫秒转秒时使用整除,避免浮点数
- 不同语言默认精度不同,注意区分最佳实践
- •JavaScript的Date对象默认使用毫秒,注意与其他语言对接时的转换
- •数据库存储毫秒时间戳时使用BIGINT类型,避免精度丢失
- •API传输时明确时间戳精度,避免秒/毫秒混淆
- •性能敏感场景考虑使用纳秒时间戳(如Go的UnixNano())