【问题标题】:Convert string into DateTime to UTC format in Python, postgresql在Python,postgresql中将字符串转换为DateTime到UTC格式
【发布时间】:2018-02-08 00:47:46
【问题描述】:

我收到 2 种不同格式的字符串格式的日期时间。但是在存储在 PostgreSql 数据库中时,它必须以 UTC 格式存储。

Format 1 : 2017-08-25 01:10:56.910523 -04:00
Format 2 : 2017-08-25 01:10:56.910523 AMERICA/NEW_YORK

尝试在 PostgreSql 中使用 timestamptz,但我猜它似乎不理解 AMERICA/NEW_YORK 所以如何在数据库中转换和存储为 UTC 格式

-4:00 和 AMERICA/NEW_YORK 只是示例,但也可以是其他任何东西。

【问题讨论】:

  • 你试过dateutil.parser吗?这是一个链接:dateutil.readthedocs.io/en/stable/parser.html 解析时区信息并重新格式化应该不难。编辑:实际上是from dateutil.tz import gettz
  • 对于 gettz 我需要知道正确的时区所以我应该解析字符串并从中获取时区

标签: python postgresql datetime


【解决方案1】:

我会做这样的事情: 首先尝试完全解析它,如果失败则单独解析它。

from dateutil import parser, tz
utc_tz = tz.gettz('UTC')

times = ['2017-08-25 01:10:56.910523 -04:00',
         '2017-08-25 01:10:56.910523 AMERICA/NEW_YORK']

for t in times:
    try:
        utc_time = parser.parse(t).astimezone(utc_tz)
    except ValueError as e:
        _date, _time, _tz = t.split(' ')
        _time_wo_tz = parser.parse(' '.join([_date, _time]))
        _parsed_tz = tz.gettz(_tz.title())
        _time_w_tz = _time_wo_tz.replace(tzinfo=_parsed_tz)
        utc_time = _time_w_tz.astimezone(utc_tz)

    print(utc_time)

【讨论】:

  • _parsed_tz = tz.gettz(_tz)AMERICA/NEW_YORK 提供无。由于它没有它在 catch 块中崩溃
  • @Sharath 你是在 Windows 机器上运行这个吗?
  • 我使用的是 Ubuntu 16.04
  • 我尝试对它进行硬编码print(tz.gettz('AMERICA/NEW_YORK')) 所以它给出了 None
  • 你能用'America/New_York'试试吗?如果可行,请将.title() 添加到_tz.(请参阅更新的答案)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
相关资源
最近更新 更多