繁体   English   中英

如何将带时区的字符串日期转换为日期时间?

[英]How to convert string date with timezone to datetime?

我在字符串中有日期:

Tue Oct 04 2016 12:13:00 GMT+0200 (CEST)

我使用(根据https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior ):

datetime.strptime(datetime_string, '%a %b %m %Y %H:%M:%S %z %Z')

但我收到错误:

ValueError: 'z' is a bad directive in format '%a %b %m %Y %H:%M:%S %z %Z'

如何正确地做到这一点?

%z是+0200%ZCEST 因此:

>>> s = "Tue Oct 04 2016 12:13:00 GMT+0200 (CEST)"
>>> datetime.strptime(s, '%a %b %d %Y %H:%M:%S GMT%z (%Z)')
datetime.datetime(2016, 10, 4, 12, 13, tzinfo=datetime.timezone(datetime.timedelta(0, 7200), 'CEST'))

我还用%d替换你的%m ; %m是月份,数字上,因此在您的情况下04将被解析为4月。

python datetime无法解析GMT部分(您可能希望以您的格式手动指定它)。 您可以使用dateutil代替:

In [16]: s = 'Tue Oct 04 2016 12:13:00 GMT+0200 (CEST)'

In [17]: from dateutil import parser

In [18]: parser.parse(s)
Out[18]: d = datetime.datetime(2016, 10, 4, 12, 13, tzinfo=tzoffset(u'CEST', -7200))
In [30]: d.utcoffset()
Out[30]: datetime.timedelta(-1, 79200)

In [31]: d.tzname()
Out[31]: 'CEST'

在不使用datetime格式标识符的情况下实现此目的的更简单方法是使用dateutil.parser() 例如:

>>> import dateutil.parser 
>>> date_string = 'Tue Oct 04 2016 12:13:00 GMT+0200 (CEST)'
>>> dateutil.parser.parse(date_string)
datetime.datetime(2016, 10, 4, 12, 13, tzinfo=tzoffset(u'CEST', -7200))

如果要解析pandas DataFrame 中列中的所有datetime数据,可以使用apply方法与dateutil.parser.parse一起dateutil.parser.parse来解析整列:

from dateutil.parser import parse
df['col_name'] = df['col_name'].apply(parse)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM