Python将字符串转换为本地日期时间到UTC日期时间

Posted

技术标签:

【中文标题】Python将字符串转换为本地日期时间到UTC日期时间【英文标题】:Python Convert String to Local DateTime to UTC DateTime 【发布时间】:2014-02-22 14:22:41 【问题描述】:

真的卡在这里了。我看过各种答案,但其中一些似乎有效(Python2.7)

我有一个字符串fileGenTime,代表时间/日期。我需要将其解析为日期/时间,然后将其转换为 UTC。我尝试过使用“pytz”,然后使用“dateutil”,但我不确定为什么它不起作用......这是我的尝试......

from datetime import datetime
from dateutil import tz

fileGenTime = 'Thu Jan  2 19:23:34 EST 2014'
fileGenTime = fileGenTime.replace('  ',' ') #double spaces...
wday, month, day, time, zone, year = fileGenTime.split(' ')
hour, minute, second = time.split(':')

localGenTime = datetime.strptime(day +' '+ month +' '+ year
 +' '+ hour +' '+ minute +' '+ second, '%d %b %Y %H %M %S')

我最初尝试在最后一行中包含zone,并以arg 格式使用%Z...现在我正在尝试将本地时间转换为带有时区的时间,然后使用@987654326 @ 将其转换为 UTC。

localZone = tz.gettz(zone)
localGenTime = localGenTime.replace(tzinfo = localZone)

normalisedTimezone = tz.gettz('UTC')
normalisedGenTime = localGenTime.astimezone(normalisedTimezone)

我收到的错误消息说.... “ValueError:月份必须在 1..12 中”....嗯?

我要拔头发了!任何帮助将不胜感激!

这里有完整的追溯......

Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "C:\Python27\lib\site-packages\python_dateutil-1.5-py2.7.egg\dateutil\tzwin.py", line 32, in utcoffset
    if self._isdst(dt):
  File "C:\Python27\lib\site-packages\python_dateutil-1.5-py2.7.egg\dateutil\tzwin.py", line 67, in _isdst
    self._dstweeknumber)
  File "C:\Python27\lib\site-packages\python_dateutil-1.5-py2.7.egg\dateutil\tzwin.py", line 166, in picknthweekday
    first = datetime.datetime(year, month, 1, hour, minute)
ValueError: month must be in 1..12

【问题讨论】:

你能添加完整的回溯吗? 编辑包含追溯 Nigel,谢谢 在我的机器上运行正常。您的 dateutil 版本很旧。你能用更新的版本试试吗? 注:EST timezone abbriviation is ambigous 【参考方案1】:

您使用的 Windows 似乎是旧版本的 dateutil,并且您点击了 this dateutil bug。

解决方案(我都试过了,都有效):

    将 dateutile 从 1.5 版升级到 2.2 版 如果由于某种原因无法升级,则可以删除文件Lib/site-packages/dateutil/tzwin.pyLib/site-packages/dateutil/tzwin.pyc。但那是纯粹的邪恶。我会选择 #1。

【讨论】:

以上是关于Python将字符串转换为本地日期时间到UTC日期时间的主要内容,如果未能解决你的问题,请参考以下文章

将 UTC 日期时间字符串转换为本地日期时间

如何将 UTC 日期字符串转换为本地时间 (systemTimeZone)

将 UTC 日期格式转换为本地 nsdate

将UTC时间字符串转换为用户的本地时间[重复]

在 PHP 中将 UTC 日期转换为本地时间

将UTC日期格式转换为本地nsdate