新闻中心

MySQL时间格式处理 13位时间戳转日期格式的完整流程

2025-08-26
浏览次数:
返回列表
13位时间戳是毫秒级,需除以1000转为秒后用FROM_UNIXTIME转换,再通过DATE_FORMAT格式化输出,注意处理NULL值、时区和性能问题。

mysql时间格式处理 13位时间戳转日期格式的完整流程

在MySQL中,将13位时间戳(毫秒级)转换为可读的日期时间格式,核心在于先将其转换为秒级时间戳,再利用

FROM_UNIXTIME
函数进行转换。

解决方案

要将存储为

BIGINT
类型的13位时间戳字段(例如
timestamp_ms
)转换为标准的日期时间格式,你需要用它除以1000,然后传入
FROM_UNIXTIME
函数。

例如,如果你有一个名为

your_table
的表,其中包含一个名为
timestamp_ms
的13位时间戳列,你可以这样查询:

SELECT
    timestamp_ms,
    FROM_UNIXTIME(timestamp_ms / 1000) AS converted_datetime
FROM
    your_table;

如果你需要更具体的日期格式,可以结合

DATE_FORMAT
函数:

SELECT
    timestamp_ms,
    DATE_FORMAT(FROM_UNIXTIME(timestamp_ms / 1000), '%Y-%m-%d %H:%i:%s') AS formatted_datetime
FROM
    your_table;

这会把像

1678886400000
这样的毫秒级时间戳,转换成
2025-03-15 08:00:00
这样的标准格式。

为什么我的时间戳是13位而不是10位?它代表什么?

这确实是个常见的问题,尤其当你从不同系统集成数据时。简单来说,10位时间戳通常表示的是自Unix纪元(1970年1月1日 00:00:00 UTC)以来的秒数,而13位时间戳则表示的是毫秒数

很多现代编程语言和框架,比如J*a的

System.currentTimeMillis()
,J*aScript的
Date.now()
,或者一些前端框架在生成时间戳时,默认就是毫秒级的。这可能是为了更精细地记录时间,因为秒级在某些场景下精度不够。我个人在处理前后端数据交互时,就经常遇到前端传过来的是13位,而数据库里习惯用10位,或者需要转换为可读格式的情况。这种差异往往是导致时间转换出错的根源,所以识别它非常重要。

如何在MySQL中将13位时间戳转换为指定日期格式?

将13位时间戳转换为你想要的具体日期格式,关键在于

DATE_FORMAT()
函数。这个函数非常灵活,允许你定义输出的字符串格式。

你已经知道需要先将毫秒转换为秒:

FROM_UNIXTIME(timestamp_ms / 1000)
。现在,我们把这个结果作为
DATE_FORMAT()
的第一个参数,第二个参数就是你想要的格式字符串。

一些常用的格式化示例:

ChatCut ChatCut

AI视频剪辑工具

ChatCut 1086 查看详情 ChatCut
  • 标准日期时间(年-月-日 时:分:秒):
    SELECT DATE_FORMAT(FROM_UNIXTIME(timestamp_ms / 1000), '%Y-%m-%d %H:%i:%s') AS standard_datetime FROM your_table;
  • 只显示日期(年/月/日):
    SELECT DATE_FORMAT(FROM_UNIXTIME(timestamp_ms / 1000), '%Y/%m/%d') AS just_date FROM your_table;
  • 只显示时间(时:分:秒):
    SELECT DATE_FORMAT(FROM_UNIXTIME(timestamp_ms / 1000), '%H:%i:%s') AS just_time FROM your_table;
  • 带有星期几和AM/PM:
    SELECT DATE_FORMAT(FROM_UNIXTIME(timestamp_ms / 1000), '%W, %M %D %Y %r') AS verbose_datetime FROM your_table;
    -- 示例输出: Wednesday, March 15th 2025 08:00:00 AM

选择合适的格式取决于你的应用场景。比如,如果是在报表里展示,你可能希望日期格式更直观;如果是日志分析,精确到秒甚至毫秒(虽然MySQL默认只到秒,但你可以在应用程序层面处理毫秒部分)可能更重要。理解这些格式化符号(如

%Y
代表四位年份,
%m
代表两位月份等)是掌握
DATE_FORMAT
的关键。

处理时间戳时可能遇到的常见问题及解决方案

在实际操作中,转换时间戳远不止一个函数调用那么简单,总会有些“坑”等着你。

一个我经常碰到的问题是数据质量。如果你的

timestamp_ms
字段里混入了非数字字符,或者干脆是
NULL
timestamp_ms / 1000
这个操作就可能报错,或者返回
NULL
。对于这种情况,你可以考虑在查询前进行数据清洗,或者使用
IFNULL
COALESCE
等函数来处理
NULL
值,甚至用
CAST
TRY_CAST
(MySQL 8+)来尝试转换,如果失败则返回
NULL
。比如,
SELECT FROM_UNIXTIME(CAST(timestamp_ms AS UNSIGNED) / 1000)
可以确保输入是数字类型,避免一些隐式转换的风险。

另一个值得注意的是时区问题

FROM_UNIXTIME()
函数默认是根据MySQL服务器的时区来解释时间戳的。如果你的13位时间戳是UTC时间(这很常见,因为时间戳通常是无时区概念的),但你的MySQL服务器设置的是本地时区,那么转换出来的结果就会有偏差。这时,你需要明确地进行时区转换。例如,如果你的时间戳是UTC,而你希望在查询结果中看到的是北京时间(UTC+8),你可以这样做:

SELECT
    CONVERT_TZ(FROM_UNIXTIME(timestamp_ms / 1000), 'UTC', 'Asia/Shanghai') AS local_datetime
FROM
    your_table;

当然,前提是你的MySQL服务器已经加载了时区信息。

还有性能考量。如果你在一个非常大的表上频繁地进行

FROM_UNIXTIME(timestamp_ms / 1000)
这样的计算,尤其是在
WHERE
子句中,性能会是一个问题,因为这会阻止索引的使用。在这种情况下,更好的做法可能是在数据插入时就将其转换为
DATETIME
类型存储,或者在MySQL 5.7+版本中,可以考虑使用生成列(Generated Columns)来存储转换后的日期时间,这样既能保留原始时间戳,又能有一个索引友好的日期时间列供查询。

例如,创建一个生成列:

ALTER TABLE your_table ADD COLUMN created_at_dt DATETIME AS (FROM_UNIXTIME(timestamp_ms / 1000));

这样

created_at_dt
列会自动计算并存储,你可以像普通列一样对其进行索引和查询,大大提升了效率。当然,这取决于你的MySQL版本和具体需求。

以上就是MySQL时间格式处理 13位时间戳转日期格式的完整流程的详细内容,更多请关注其它相关文章!


# 如果你  # 厦门网站建设在哪里  # 第三方网站建设销售药品  # 杭州网站建设创造辉煌  # 大同产品推广营销  # 莆田网站模板建设公司  # 乐山营销推广多少钱  # 芦淞区网络营销推广中心  # 头条营销推广师招聘  # 介休全网营销推广服务  # 长沙Seo收  # 将其  # 两种  # mysql  # 清空  # 是在  # 你可以  # 转换为  # 离线  # 的是  # 为什么  # 隐式转换  # 格式化输出  # ai  # 编程语言  # javascript 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升  菜鸟取件码是什么怎么查 最全查询渠道汇总  J*a递归快速排序中静态变量的状态管理与陷阱  C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言  HuggingFaceEmbeddings中向量嵌入维度调整的限制与理解  qq音乐在线播放入口_qq音乐电脑版登录链接  漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口  在哪找SublimeJ远程工具_SFTP插件配置教程  如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension  怎么在mac上运行html代码_mac运行html代码方法【指南】  Golang如何优雅处理error_Golang error处理最佳实践总结  2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享  zookeeper 都有哪些功能?  LINQ to XML为何解析失败? 深入理解C# XDocument的异常处理  Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】  拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧  蛙漫画网页版全站入口 蛙漫热门作品免费浏览  抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧  网易大神账号申诉需要多久_网易大神账号申诉流程说明  火锅吃太多会怎样 火锅吃太多会上火吗  俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口  c++中为什么推荐使用using替代typedef_c++现代化类型别名  Node.js CSV 数据处理:基于字段空值条件过滤整条记录的策略  魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】  Golang如何实现状态模式管理对象状态_Golang State模式实现技巧  如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧  age动漫网站入口 age动漫官网直接访问入口  2025-2030年全球乘用车销量预测:新能源成增长主力  Go语言HTML解析:利用Goquery精准获取指定元素内容  Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】  如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流  c++中的std::launder有什么实际用途_c++对象生命周期与指针优化  谷歌google账号注册详细步骤 谷歌账号注册官方教程  字由网在线版登录地址 字由网网页版安全入口  windows10怎么关闭系统提示音_windows10彻底静音设置方法  Web Components中自定义开关组件状态同步的常见陷阱与解决方案  迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法  单射、满射与双射的关系 一文理清所有逻辑  微信网页版扫码登录入口 微信网页版二维码登录入口  Word2013如何插入视频和音频媒体_Word2013媒体插入的多媒体支持  192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台  J*aScript:在map操作中高效处理空数组  css链接悬停下划线样式如何自定义_使用::after结合content和transition  PySpark中高效提取字符串右侧可变长度数字:使用regexp_extract  J*aScript map 方法中处理循环元素为空数组的策略  使用Pandas转换并合并DataFrame:多列映射至统一结构  浏览器打开即用 美图秀秀网页版入口  如何在Promise链中优雅地中断后续then执行  “音游” × “怪文书” 题材的节奏冒险游戏 《晕晕电波症候群》确定于2026年4月发售!  sublime怎么预览Markdown渲染效果_Markdown Preview插件 for sublime教程 

搜索