在Python中parsing时间string

我有一个date时间string,我不知道如何parsing它在Python中。

string是这样的:

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 offset in the form +HHMM or -HHMM (empty string if the the object is naive). 

我想知道什么是正确的格式来parsing这个时间string?

datetime.datetime.strptime在时区parsing方面有问题。 看看dateutil包 :

 >>> from dateutil import parser >>> parser.parse("Tue May 08 15:14:45 +0800 2012") datetime.datetime(2012, 5, 8, 15, 14, 45, tzinfo=tzoffset(None, 28800)) 

你最好的select是看看strptime()( http://docs.python.org/library/time.html#time.strptime

一些东西沿线

 >>> 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时区不幸的是,也许别人可以帮助与此。

格式化string可以在http://docs.python.org/library/time.html#time.strftimefind,格式化string以进行打印。;

希望有所帮助

标记

PS,你从pypi安装pytz时最好的select。 ( http://pytz.sourceforge.net/ )事实上,我认为pytz有一个很好的date时间parsing方法,如果我没有记错的话。 标准的lib在时区function上有点薄。

它在SO中已经多次讨论过了。 总之,“%z”不支持,因为平台不支持它。 我的解决scheme是一个新的,只是跳过时区:

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

这是一个stdlib解决scheme,它在input时间string中支持一个variablesutc offset:

 >>> 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) 
 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()).