Unix 时间戳与数据库日期函数在线转换工具

免费在线 Unix 时间戳与日期时间双向转换器。支持实时秒与毫秒时间戳生成、北京时间与 UTC 对照,并提供 MySQL、PostgreSQL、SQLite、Oracle 等主流数据库的原生时间戳转日期与日期转时间戳 SQL 函数一键复制。100% 浏览器纯前端运行。

100% 浏览器本地运行 · 零数据上传
当前实时 Unix 时间戳
1793515521 (秒)

时间戳 ➔ 转换为日期与 SQL 语法

支持 10位/13位自动识别
北京时间 (UTC+8):
-
标准 UTC 时间:
-
相对时间: -
各数据库【时间戳转日期】原生 SQL 函数 点击代码或复制按钮
MySQL FROM_UNIXTIME(...)
PostgreSQL to_timestamp(...)
SQLite datetime(..., 'unixepoch', 'localtime')
Oracle TO_DATE('19700101','YYYYMMDD') + ... / 86400

日期时间 ➔ 转换为时间戳与 SQL 语法

秒与毫秒双重输出
10 位时间戳 (秒 s):
-
13 位时间戳 (毫秒 ms):
-
各数据库【日期转时间戳 / 获取当前时间】SQL 函数 点击复制
MySQL UNIX_TIMESTAMP(...)
PostgreSQL EXTRACT(EPOCH FROM TIMESTAMP '...')::BIGINT
SQLite strftime('%s', '...')
Oracle (CAST(TIMESTAMP '...' AS DATE) - DATE '1970-01-01') * 86400

Unix 时间戳概念与各数据库日期体系

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)

数据库时间存储最佳实践与避坑指南

  1. 时区陷阱(Timezone): MySQL 的 TIMESTAMP 类型底层存储的是 UTC 秒级时间戳,检索时会自动根据当前数据库连接的 time_zone 进行时区转换;而 DATETIME 则是“所见即所得”的静态字面量,不带时区信息。跨国跨时区业务推荐统一在应用层使用 UTC 时间戳,或在 PG 中采用 TIMESTAMP WITH TIME ZONE (TIMESTAMPTZ)。
  2. 2038 年问题(Y2038): 32 位有符号整数最大只能表示到 2038-01-19 03:14:07 UTC(时间戳 2147483647)。在 MySQL 中,如果用 INT 或老版本的 32 位 TIMESTAMP 存储时间,届时将发生溢出回绕。现代数据库建表推荐采用 64 位整型 BIGINT(毫秒/微秒时间戳)或 DATETIME(6) / TIMESTAMPTZ。
  3. 毫秒精度丢失: Java 语言中 System.currentTimeMillis() 返回的是 13 位毫秒时间戳。如果在 MySQL 中直接执行 FROM_UNIXTIME(1793515521000),因数值巨大将直接返回 NULL。必须先除以 1000,或者使用 FROM_UNIXTIME(ts / 1000.0) 配合 DATETIME(3) 保留毫秒微秒精度。