在一些软件项目中,经常看到一些用后端代码转换日期再传给 MySQL 的操作,其实大可不必。MySQL 本身就提供了完善的时间戳和日期之间的互转函数,本文总结了这些函数的用法。
日期转时间戳
在开始用 MySQL 把时间戳转换为日期之前,我想先提一下如何用 MySQL 把日期转换为时间戳。原因是我手头没有要转换的时间戳。:P
MySQL 把时间转换为时间戳的函数是 unix_timestamp
,默认不提供任何参数会把当前时间转换为时间戳:
mysql> SELECT unix_timestamp();
+------------------+
| unix_timestamp() |
+------------------+
| 1666344801 |
+------------------+
如果想要把指定时间转换为时间戳,可以在调用时提供日期加时间的字符串格式参数:
mysql> SELECT unix_timestamp('2022-10-21 00:00:00');
+---------------------------------------+
| unix_timestamp('2022-10-21 00:00:00') |
+---------------------------------------+
| 1666310400 |
+---------------------------------------+
时间戳转日期
上面我得到了一个时间戳:1666344801
,那么如何把它转为年月日加时间的字符串格式?答案是使用 MySQL 的 from_unixtime
函数:
mysql> SELECT from_unixtime(1666344801);
+---------------------------+
| from_unixtime(1666344801) |
+---------------------------+
| 2022-10-21 09:33:21 |
+---------------------------+
from_unixtime
除了时间戳参数,还有第二个时间格式参数,可以定义转换日期的返回格式,比如只需要年月日就可以这样来调用:
mysql> SELECT from_unixtime(1666344801, '%Y-%m-%d');
+---------------------------------------+
| from_unixtime(1666344801, '%Y-%m-%d') |
+---------------------------------------+
| 2022-10-21 |
+---------------------------------------+
%Y
,%m
,%d
这三个是 MySQL 的日期格式占位字符,分别代表了四位数字的年份和两位数字的月份以及日期。还有很多个这样的类似符号,详情可以参考下面的日期格式化符号列表。
日期格式化符号列表
符号 | 说明 | 示例 |
---|---|---|
%Y |
四位数字表示的年份 | 2015, 2016... |
%y |
两位数字表示的年份 | 15, 16... |
%M |
英文月名 | January, February, ..., December |
%b |
英文缩写月名 | Jan, Feb, ..., Dec |
%m |
两位数字表示月份 | 01, 02, ..., 12 |
%c |
数字表示月份 | 1, 2, ..., 12 |
%d |
两位数字表示的日期,不足两位的前面用 0 补充 | 01, 02, ..., 31 |
%e |
数字表示的日期 | 1, 2, ..., 31 |
%D |
英文格式的日期 | 1st, 2nd, 3rd ... |
%U |
数字表示周数 | 星期天为一周的第一天 |
%u |
数字表示周数 | 星期一为一周的第一天 |
%W |
周几全称 | Sunday, Monday, ..., Saturday |
%a |
周几缩写 | Sun, Mon, ..., Sat |
%w |
以数字形式标识周 | 0=Sunday, 1=Monday, ..., 6=Saturday |
%j |
按年表示的天数 | 001, 002, ..., 366 |
%H |
24小时制,两位数形式小时 | 00, 01, ..., 23 |
%h |
12小时制,两位数形式小时 | 00, 01, ..., 12 |
%k |
24小时制,数形式小时 | 0, 1, ..., 23 |
%l |
12小时制,数形式小时 | 0, 1, ..., 12 |
%I , %i |
两位数字形式的分 | 00, 01, ..., 59 |
%T |
24小时制,时间形式 | HH:mm:ss |
%r |
12小时制,时间形式 | hh:mm:ss AM 或 PM |
%p |
上午下午 | AM, PM |
%S , %s |
两位数字形式的秒 | 00, 01, ..., 59 |