这个问题在这里已经有答案了:
如何使用时区信息在mysql中存储datetime(5个答案)
两年前关门了。
目前,我有来自shopifyapi(2018-12-16t17:36:29+11:00)的时间戳,我需要将它存储在mysql的datetime字段中。
第一个问题:
2018-12-16t17:36:29+11:00到底意味着什么?
日期:2018-12-16,
时间:17:36:29,
时区:+11:00?????
第二个问题:
如果我想将时间戳存储到mysql datetime列中。我得到这个错误
SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '2018-12-16T17:36:29+11:00' for column 'shopify_created_at' at row 1
用时区信息存储时间的正确方法是什么?
3条答案
按热度按时间bkhjykvo1#
时区:+11:00=utc+11:00是从utc开始的+11小时时间偏移的标识符。这个时间用于:北亚,澳大利亚和其他一些国家。
至于时间戳,您可以简单地使用:
pb3s4cty2#
2018-12-16t17:36:29+11:00到底意味着什么?
这是utc偏移时间戳,因此您有:
我不熟悉shopify和它们的API,但是,如果知道/存储时区很重要,我会将utc时间存储在数据库的一列中(使用
datetime
fieldtype)和另一列中的偏移小时数。例子:
这样,您就可以获得所需时区的准确时间。例子:
nxagd54h3#
我不熟悉shopify,但它看起来像utc偏移量,所以应该是:
至于你的第二个问题,你没有:
mysql将时间戳值从当前时区转换为utc进行存储,然后从utc转换回当前时区进行检索。
所有时间戳都不受时区限制。您可以单独保存时区,也可以将其保存为字符串。最好的办法是把
2018-12-16T17:36:29+11:00
通过从时钟中减去时区,然后保存2018-12-16T06:36:29
以及+11:00
分开。如果您不需要时区引用来进一步使用,那么您可以将时间标准化并放弃tz规范。另外,根据你的需要,你可能会做这两件事。规范化时间戳将有助于以可靠的方式进行排序,而不受时间限制,同时,如果需要用于其他shopify查询,则可以存储和检索完整的字符串。