免费在线 Unix 时间戳与日期时间双向转换器。支持实时秒与毫秒时间戳生成、北京时间与 UTC 对照,并提供 MySQL、PostgreSQL、SQLite、Oracle 等主流数据库的原生时间戳转日期与日期转时间戳 SQL 函数一键复制。100% 浏览器纯前端运行。
Unix 时间戳(Unix Timestamp / Epoch Time)是指自格林尼治时间(UTC)1970 年 01 月 01 日 00 时 00 分 00 秒起至现在的总秒数(10位)或总毫秒数(13位)。它与地理位置和时区完全解耦,是分布式系统、接口通信与数据库底层记录时间事实的通用工业标准。
| 数据库 | 获取当前时间 | 秒级时间戳 ➔ 格式化日期 | 日期 ➔ 秒级时间戳 | 日期加减计算 (如加 1 天) |
|---|---|---|---|---|
| MySQL | NOW() | FROM_UNIXTIME(ts) | UNIX_TIMESTAMP(dt) | dt + INTERVAL 1 DAY |
| PostgreSQL | NOW() | to_timestamp(ts) | EXTRACT(EPOCH FROM dt)::BIGINT | dt + INTERVAL '1 day' |
| SQLite | datetime('now', 'localtime') | datetime(ts, 'unixepoch', 'localtime') | strftime('%s', dt) | datetime(dt, '+1 day') |
| Oracle | SYSDATE | TO_DATE('19700101','YYYYMMDD') + (ts/86400) | (CAST(dt AS DATE) - DATE '1970-01-01') * 86400 | dt + 1 |
| SQL Server | GETDATE() | DATEADD(second, ts, '1970-01-01 08:00:00') | DATEDIFF(second, '1970-01-01 08:00:00', dt) | DATEADD(day, 1, dt) |
TIMESTAMP 类型底层存储的是 UTC 秒级时间戳,检索时会自动根据当前数据库连接的 time_zone 进行时区转换;而 DATETIME 则是“所见即所得”的静态字面量,不带时区信息。跨国跨时区业务推荐统一在应用层使用 UTC 时间戳,或在 PG 中采用 TIMESTAMP WITH TIME ZONE (TIMESTAMPTZ)。
2038-01-19 03:14:07 UTC(时间戳 2147483647)。在 MySQL 中,如果用 INT 或老版本的 32 位 TIMESTAMP 存储时间,届时将发生溢出回绕。现代数据库建表推荐采用 64 位整型 BIGINT(毫秒/微秒时间戳)或 DATETIME(6) / TIMESTAMPTZ。
System.currentTimeMillis() 返回的是 13 位毫秒时间戳。如果在 MySQL 中直接执行 FROM_UNIXTIME(1793515521000),因数值巨大将直接返回 NULL。必须先除以 1000,或者使用 FROM_UNIXTIME(ts / 1000.0) 配合 DATETIME(3) 保留毫秒微秒精度。