【问题标题】:python converting any datetime string to UTC [duplicate]python将任何日期时间字符串转换为UTC [重复]
【发布时间】:2016-08-03 20:11:13
【问题描述】:

我有一个乏味的函数来做这样的事情:

...
if ('PDT' in stringVal) or ('PST' in stringVal):
    utcdateTime = convert(stringVal)+(hardcode the offset)
elif('EDT' in stringVal)...
...

我查看了包括this 在内的几篇帖子,但找不到任何符合我目的的帖子。我还查看了datetime.datetime 和整个datetime 模块,但它有.now() 之类的东西; .utcnow(); datetime.now(tz.pytz.utc) 等等等等。基本上如果我有类似的东西:

2014-05-01 01:02:03 PDT
2014-05-01 01:02:03 PST
2014-05-01 01:02:03 EDT
2014-05-01 01:02:03 EST
2014-05-01 01:02:03 MDT
2014-05-01 01:02:03 MST

是否有一个 python 模块可以使用一些方法将上述日期时间字符串转换为 UTC?如果没有,我会坚持我的硬编码方式。

【问题讨论】:

  • 不完全是重复的,而是类似/相反的问题。您应该在答案中找到如何解析时区并从本地转换为 utc。
  • 这两个似乎都不是重复的,一个不处理时区,另一个则相反,从 UTC 转换
  • @BrendanAbel 反向并不是真正的反向。您正在使用 .astimezone(...) 和 timezone 作为参数。当然,如果您可以编写任何 Python,您就可以概括该答案。
  • @AkshatMahajan 显然不是您发布的内容的副本
  • @viraptor 我将尝试该帖子中的解决方案。不是重复的,而是类似的东西。我会尝试他们的方式

标签: python datetime


【解决方案1】:

您需要翻译时区字符串,否则您可以使用datetimepytz 库。

import datetime
import pytz

s = '2014-05-01 01:02:03 PST'
ds, tzs = s.rsplit(' ', 1)

tz_map = {
    'PST': 'US/Pacific', 
    'EST': 'US/Eastern'
}
tz = pytz.timezone(tz_map[tzs])

dt = datetime.datetime.strptime(ds, '%Y-%m-%d %H:%M:%S').replace(tzinfo=tz)
dt_utc = dt.astimezone(pytz.utc)

【讨论】:

  • 第 5 行出现错误:按' ' 分割将导致返回三个值,而不是两个。
  • 谢谢,第二个参数应该是 1。
  • @BrendanAbel 这将如何处理“PDT”和“EDT”等?
  • 他们使用与 PST、EST 相同的时区。 Pytz 将根据日期使用正确的日期。如果您确实想在 PST 日期期间强制 PDT,您可以使用 timezone.localize 和 PDT 日期来获取静态 PDT 时区。
  • @BrendanAbel 我尝试使用您的代码,效果很好,但是当我在字符串中使用“PDT”时,UTC 时间缩短了一个小时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
  • 2016-10-07
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
相关资源
最近更新 更多