我有一个变量:data_datetime = dateutil.parser.parse(data['datetime'])
我打印出来,2016-03-12 01:49:43.082514+00:00
我保存到数据库中:obj.update_time = data_datetime
但是数据库的时间不对,省2016-03-12 01:49:43.082514+08
(加时区8小时)
它应该节省2016-03-12 01:49:43.082514+00:00
或2016-03-12 09:49:43.082514+08
我感到非常困惑。如何将正确的时间保存到数据库中???
我还有一次尝试current_utc_time = datetime.datetime.now(pytz.utc)
我把它打印出来:2016-03-12 02:01:58.631653+00:00
当它保存到数据库obj.update(id=id,update_time=current_utc_time)
它节省了我想要的正确时间:2016-03-12 10:01:58.364853+08
我不知道为什么data_datetime = dateutil.parser.parse(data['datetime'])
不能不节省正确的时间
请帮助我,谢谢
我发现了一个区别:一个是使用obj.update_time = data_datetime
,另一个是使用obj.update(id=id,update_time=current_utc_time)
如果是根本原因,我怎样才能节省我想要的正确时间???
当你从 Python datetime 对象开始时,它会正确地序列化到数据库中。当您从数据库日期时间对象往返时,解析为 Python 对象,它们序列化回来,时区已损坏。 解析函数 (https://dateutil.readthedocs.org/en/latest/parser.html#dateutil.parser.parse) 的 dateutil 包文档讨论了ignoretz
以及tzinfos
参数,以及它会对时区做出天真的猜测的事实。再加上这些文档中的所有示例都显示两位数的时区偏移量,我的猜测是您需要在要解析的字符串中将 00:00 替换为 00。或者,以某种方式使用 tzinfos 参数将ISO8601时区偏移量样式映射到 UTC 时区,以便解析器不会对无法解析的数据进行不正确的猜测。