在Python中解析时间字符串

在Python中解析时间字符串,python,datetime,datetime-parsing,Python,Datetime,Datetime Parsing,我有一个日期时间字符串,我不知道如何在Python中解析它 字符串如下所示: Tue May 08 15:14:45 +0800 2012 我试过了 datetime.strptime("Tue May 08 15:14:45 +0800 2012","%a %b %d %H:%M:%S %z %Y") 但Python提出了 'z' is a bad directive in format '%a %b %d %H:%M:%S %z %Y' 根据Python文档: %z UTC偏移量的形式

我有一个日期时间字符串,我不知道如何在Python中解析它

字符串如下所示:

Tue May 08 15:14:45 +0800 2012
我试过了

datetime.strptime("Tue May 08 15:14:45 +0800 2012","%a %b %d %H:%M:%S %z %Y")
但Python提出了

'z' is a bad directive in format '%a %b %d %H:%M:%S %z %Y'
根据Python文档:

%z UTC偏移量的形式为+HHMM或-HHMM(如果对象为原始对象,则为空字符串)

解析此时间字符串的正确格式是什么?
在[117]:datetime.datetime.strtime中?
In [117]: datetime.datetime.strptime?
Type:           builtin_function_or_method
Base Class:     <type 'builtin_function_or_method'>
String Form:    <built-in method strptime of type object at 0x9a2520>
Namespace:      Interactive
Docstring:
    string, format -> new datetime parsed from a string (like time.strptime()).
类型:内置函数或方法 基类: 字符串形式: 名称空间:交互式 文档字符串: 字符串,格式->从字符串解析的新日期时间(如time.strtime())。
datetime.datetime.strtime
在时区解析方面存在问题。请看一下:


你最好看一看

类似于

>>> from datetime import datetime
>>> date_str = 'Tue May 08 15:14:45 +0800 2012'
>>> date = datetime.strptime(date_str, '%a %B %d %H:%M:%S +0800 %Y')
>>> date
datetime.datetime(2012, 5, 8, 15, 14, 45)
我不知道如何做+0800时区不幸的是,也许其他人可以帮助

格式化字符串可在中找到,与格式化打印字符串相同

希望有帮助

标记

另外,在pypi安装pytz时,您最好选择时区。( )
事实上,如果我没记错的话,我认为pytz有一个很棒的日期时间解析方法。标准库有点薄,带有时区功能。

它在SO中讨论过很多次。简而言之,“%z”不受支持,因为平台不支持它。 我的解决方案是新的,只需跳过时区即可

    datetime.datetime.strptime(re.sub(r"[+-]([0-9])+", "", "Tue May 08 15:14:45 +0800 2012"),"%a %b %d %H:%M:%S %Y")

以下是一个支持输入时间字符串中可变utc偏移量的stdlib解决方案:

>>> from email.utils import parsedate_tz, mktime_tz
>>> from datetime import datetime, timedelta
>>> timestamp = mktime_tz(parsedate_tz('Tue May 08 15:14:45 +0800 2012'))
>>> utc_time = datetime(1970, 1, 1) + timedelta(seconds=timestamp)
>>> utc_time
datetime.datetime(2012, 5, 8, 7, 14, 45)

我尝试了
datetime.strtime(“5月8日星期二15:14:45+0800 2012”,%a%b%d%H:%M:%S%z%Y”)
,但Python提出了
“z”是一个错误的指令,格式为“%a%b%d%H:%M:%S%z%Y”
eumiro提到了
datetime.datetime.strtime。strtime
在时区解析方面存在问题。我想是的true@zidarsk8尝试以下操作:
parser.parse(“02/Nov/2012:06:37:42+0000”,fuzzy=True)
-指定fuzzy时,解析器会忽略它不理解的字符。这实际上会错误地解析日期
Fri Nov 9 09:04:02 2012-0500
忽略
-0500
并使用当前时区。命令为“pip install python dateutil”以使用pip btw安装它。小心-使用此库我也得到了不正确的结果,月份和日期颠倒了!2017年1月19日=>2017年1月12日=>December@eumiro我刚刚建议对你的答案进行编辑,但我的编辑是错误的,我不知道如何取消编辑。请拒绝它。相关:您的解决方案仍然失败,只是没有抛出错误。这是可靠的!例如,我的字符串是“GMT-0500”,而
parsedate\u tz
似乎与“GMT”混淆了,但它是一个快速的
。替换(“GMT”),它是完美的!
>>> from email.utils import parsedate_tz, mktime_tz
>>> from datetime import datetime, timedelta
>>> timestamp = mktime_tz(parsedate_tz('Tue May 08 15:14:45 +0800 2012'))
>>> utc_time = datetime(1970, 1, 1) + timedelta(seconds=timestamp)
>>> utc_time
datetime.datetime(2012, 5, 8, 7, 14, 45)