我有两个不同格式的时间戳。
一个是UTC字符串,如下所示:"2014-09-19T20:55:51Z"
另一个是一个unix时间戳,它看起来像这样:1411159809
这两个时间戳正好相隔五分钟。正如我用这个历代变换器工具所验证的那样。
我想把这两个时间戳(以及它们描述的数据)都放到我的数据库中,但当我这么做时,他们就不同意了。
我使用的桌子看起来是这样的:
+--------------+--------------+------+-----+---------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------------------+-----------------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| property_key | int(11) | YES | | NULL | |
| updated_at | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| created_at | timestamp | NO | | 0000-00-00 00:00:00 | |
| value | varchar(128) | YES | | NULL | |
| name | varchar(128) | YES | | NULL | |
+--------------+--------------+------+-----+---------------------+-----------------------------+作为询问,我有:
insert into events (value,property_key,created_at) values ('datapoints/56892923',273827,'2014-09-19T20:55:51Z')
和
insert into events (value,name,created_at) values ('240','HeartRate',FROM_UNIXTIME(1411159809))
当我从数据库中提取这些条目时,我得到的是:
*************************** 1. row ***************************
id: 1
property_key: 273827
updated_at: 2014-09-19 17:42:44
created_at: 2014-09-19 20:55:51
value: datapoints/56892923
name: NULL
*************************** 2. row ***************************
id: 2
property_key: NULL
updated_at: 2014-09-19 17:43:09
created_at: 2014-09-19 14:50:09
value: 240
name: HeartRate
2 rows in set (0.00 sec)正如预期的那样,updated_at成为创建行的时间戳。困扰我的是,created_at是不同的六个小时。我猜MYSQL将UTC解释为当地时间,但这不是我想要的。我如何得到这些时间戳来表现我想要的样子?
发布于 2014-09-20 00:35:56
阅读FROM_UNIXTIME()手册
将unix_timestamp参数的表示形式返回为‘YYYY:MM:SS’或YYYYMMDDHHMMSS.uuuuuu格式的值,这取决于函数是用于字符串还是在数字上下文中使用。值在当前时区中表示。
另外,对于TIMESTAMP数据类型的定义:
MySQL将时间戳值从当前时区转换为UTC存储,并从UTC转换回当前时区进行检索。
因此,如果您使用的是TIMESTAMP列,那么您只需使用TZ_CONVERT来确保时间戳被格式化为UTC。
https://stackoverflow.com/questions/25943887
复制相似问题