【问题标题】:Python: converting date string to UTCPython:将日期字符串转换为 UTC
【发布时间】:2023-05-29 11:53:01
【问题描述】:

我正在解析第 3 方网站 HTML,其日期和时间始终采用英国时间格式,但它们的源代码中没有任何时区信息。使用 datetime.strptime() 将字符串转换为对象很容易,但是如何添加时区信息?

最终,我需要将这些字符串转换为 UTC 格式的日期时间对象。该代码将始终在可识别时区的 PC 上运行,即 datetime.now() 将返回英国时间。

temp = '07/12/2017 13:30'
dt = datetime.strptime(temp, '%d/%m/%Y %H:%M')

有更好的方法吗?

offset = datetime.now() - datetime.utcnow()
dt -= offset

【问题讨论】:

    标签: python datetime tzinfo


    【解决方案1】:

    有一些很好的库可以让处理日期变得更加容易。我喜欢dateparserparsedatetimearrow

    import dateparser as dp
    dt = dp.parse('07-12-2017 13:30 PST')
    print (dt)
    
    dt = dp.parse("Yesterday at 3:00am EST")
    print(dt)
    
    
    2017-07-12 13:30:00-08:00
    2017-12-06 17:07:07.557109-05:00
    

    【讨论】:

      【解决方案2】:

      使用 pytz

      import datetime
      import pytz
      
      temp = '07/12/2017 13:30'
      dt = datetime.strptime(temp, '%d/%m/%Y %H:%M')
      timezone = pytz.timezone("Etc/Greenwich")
      d_aware = timezone.localize(dt)
      d_aware.tzinfo
      > <DstTzInfo 'Etc/Greenwich' PST-1 day, 16:00:00 STD>
      d_aware
      datetime.datetime(2017, 12, 7, 13, 30, tzinfo=<StaticTzInfo 'Etc/Greenwich'>)
      

      【讨论】:

      • 感谢您的建议。是否可以在不使用 3rd 方库的情况下做到这一点?我想知道是否有办法获得 PC 的时区偏移量(这将是英国时间)?
      • 你的电脑是英国时间还是你正在抓取英国时间的网站?该网站可能会进行本地化并将其服务器时间更改为您的客户端(即您的抓取工具)的时区。
      • 我在英国,正在抓取一个英国网站。我需要转换为 UTC 的原因是因为我使用抓取的数据然后与默认为 UTC 的 API 进行交互。我可以使用自己的 PC 进行转换,因为我确信两者都使用英国时区。
      • 为什么限制不使用 pytz ?我会用它。