Skip to content

UNIX_TIMESTAMP()

函数说明

UNIX_TIMESTAMP() 返回自 1970-01-01 00:00:00 UTC 至当前时间的秒数。

UNIX_TIMESTAMP(date) 将参数的值返回为 1970-01-01 00:00:00 UTC 至 date 指定时间的秒数。

如果日期超出范围传递给 UNIX_TIMESTAMP(),它将返回 0。如果 dateNULL,则返回 NULL

如果没有给出参数或参数不包含小数秒部分,则返回值为整数;如果给出参数包含小数秒部分,则返回值为 DECIMAL

函数语法

> UNIX_TIMESTAMP([date])

参数释义

参数 说明
date 可选参数。date 参数是合法的日期表达式。
date 参数可以是 DATEDATETIMETIMESTAMP 字符串,也可以是 YYMMDDYYMMDDhhmmssYYYYMMDDYYYYMMDDhhmmss 格式的数字。如果 date 参数包含时间部分,则它有选择地包含秒的小数部分。
当 date 参数是 TIMESTAMP 时,UNIX_TIMESTAMP() 直接返回内部时间戳值,而不进行隐含的 string-to-Unix-timestamp 转换。

非 UTC 时区的值和 Unix 时间戳值之间的转换

如果使用 UNIX_TIMESTAMP()FROM_UNIXTIME() 在非 UTC(Coordinated Universal Time,协调世界时)时区的值和 Unix 时间戳值之间进行转换,则转换是有损的,因为映射在两个方向上不是一对一的。例如,由于诸如夏令时 (DST) 等本地时区更改的约定,UNIX_TIMESTAMP() 可以将在非 UTC 时区中不同的两个值映射到相同的 Unix 时间戳值。FROM_UNIXTIME() 将该值仅映射回原始值之一。下面的示例,即,使用在 MET 时区不同的值:

mysql> SET time_zone = 'MET';
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT UNIX_TIMESTAMP('2005-03-27 03:00:00');
+-------------------------------------+
| unix_timestamp(2005-03-27 03:00:00) |
+-------------------------------------+
|                          1111885200 |
+-------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT UNIX_TIMESTAMP('2005-03-27 02:00:00');
+-------------------------------------+
| unix_timestamp(2005-03-27 02:00:00) |
+-------------------------------------+
|                          1111885200 |
+-------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT FROM_UNIXTIME(1111885200);
+---------------------------+
| from_unixtime(1111885200) |
+---------------------------+
| 2005-03-27 03:00:00       |
+---------------------------+
1 row in set (0.00 sec)

示例

mysql> SELECT UNIX_TIMESTAMP("2016-07-11");
+----------------------------+
| unix_timestamp(2016-07-11) |
+----------------------------+
|                 1468188000 |
+----------------------------+
1 row in set (0.00 sec)

mysql> SELECT UNIX_TIMESTAMP('2015-11-13 10:20:19');
+-------------------------------------+
| unix_timestamp(2015-11-13 10:20:19) |
+-------------------------------------+
|                          1447406419 |
+-------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT UNIX_TIMESTAMP('2015-11-13 10:20:19.012');
+-----------------------------------------+
| unix_timestamp(2015-11-13 10:20:19.012) |
+-----------------------------------------+
|                       1447406419.012000 |
+-----------------------------------------+
1 row in set (0.00 sec)

限制

目前 date 格式只支持 yyyy-mm-ddyyyymmdd 的数据格式。