【问题标题】:Confused about timezone,dateutil.parser.parse ?对时区、dateutil.parser.parse 感到困惑?
【发布时间】:2016-03-12 02:22:40
【问题描述】:

我有一个变量: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:002016-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)
如果是根本原因,我怎样才能节省我想要的正确时间???

【问题讨论】:

    标签: django postgresql timezone


    【解决方案1】:

    当您从 Python 日期时间对象开始时,它会正确序列化到数据库中。当您从数据库日期时间对象往返,解析为 Python 对象时,它们被序列化回来,时区被破坏。解析函数 (https://dateutil.readthedocs.org/en/latest/parser.html#dateutil.parser.parse) 的 dateutil 包文档讨论了 ignoretz 以及 tzinfos 参数,以及它会对时区做出天真的猜测这一事实。再加上这些文档中的所有示例都显示了两位数的时区偏移,我猜你需要在你正在解析的字符串中将 00:00 替换为 00 。或者,使用 tzinfos 参数以某种方式将 ISO8601 时区偏移样式映射到 UTC 时区,这样解析器就不会对其无法解析的数据做出错误的猜测。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      • 2012-07-22
      • 2013-05-13
      • 2020-04-16
      相关资源
      最近更新 更多