Gém*_*nis 3 python mysql timezone datetime dst
我使用mysqlclient包的MySQLdb在Python上收到此错误.
_mysql_exceptions.OperationalError:
(1292, "Incorrect datetime value: '2018-03-25 02:00:02' for column 'start' at row 1")
Run Code Online (Sandbox Code Playgroud)
导致错误的代码:
conn.cursor.execute(query.format(table=table),
(row['id'], row['type'], row['start'], row['end'],
row['raw_xml'], row['id_parent'], row['rango']))
Run Code Online (Sandbox Code Playgroud)
我可以正确插入其余行,但是当我尝试插入此datetime对象时,它会崩溃.
数据库中的字段是一个时间戳字段,它与其余的datetime对象一起工作,但不知道为什么它试图使这个语句崩溃.
提前致谢.
中欧时间在2018-03-25 02:00当地时间从标准时间切换到白天时间.
这很可能是标准时间到日光时间切换当天的时区转换错误.从0200到0300之前的小时不存在.您的时间价值2018-03-25 02:00:02在中欧时间不存在.
这会让你2018-03-25 03:00:00.
SET time_zone = 'Europe/Madrid';
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP('2018-03-25 02:30'));
Run Code Online (Sandbox Code Playgroud)
使用这个cheezy表定义:
CREATE TABLE timetest (
id INT NOT NULL AUTO_INCREMENT,
ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX `PK` (`id`)
);
Run Code Online (Sandbox Code Playgroud)
运行此INSERT可以获得错误的DATETIME值错误.
INSERT INTO timetest (ts) VALUES ('2018-03-25 02:30');
Run Code Online (Sandbox Code Playgroud)
但运行此hack工作正常并放入03:00表中.
INSERT INTO timetest (ts) VALUES (FROM_UNIXTIME(UNIX_TIMESTAMP('2018-03-25 02:30')));
Run Code Online (Sandbox Code Playgroud)
你最好的办法是找出你如何提出无效的日期/时间值,并纠正你的错误.你的第二个最好的选择是这个黑客.
您还可以将TIMESTAMP列更改为DATETIME列,并以本地时间存储所有时间戳.
| 归档时间: |
|
| 查看次数: |
1333 次 |
| 最近记录: |