2024-04-25 20:38:12 发布
网友
我必须将时区感知字符串转换为pythondatetime对象。
datetime
例如2012-11-01T04:16:13-04:00。
2012-11-01T04:16:13-04:00
我发现有一个dateutil模块有一个解析函数来完成它,但是我不想使用它,因为它添加了一个依赖项。
dateutil
那我该怎么做呢?我试过如下的方法,但没有成功。
datetime.datetime.strptime("2012-11-01T04:16:13-04:00", "%Y-%m-%dT%H:%M:%S%Z")
从Python 3.7开始,datetime.datetime.fromisoformat()可以处理您的格式:
datetime.datetime.fromisoformat()
>>> import datetime >>> datetime.datetime.fromisoformat('2012-11-01T04:16:13-04:00') datetime.datetime(2012, 11, 1, 4, 16, 13, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000)))
在较旧的Python版本中,如果没有大量的人工时区定义,就不能这样做。
Python不包括时区数据库,因为它会很快过时。相反,Python依赖外部库来为您提供正确配置的时区,外部库的发布周期要快得多。
作为副作用,这意味着时区解析也需要是一个外部库。如果dateutil对您来说太重,请改用^{},它将很好地解析您的特定格式:
>>> import iso8601 >>> iso8601.parse_date('2012-11-01T04:16:13-04:00') datetime.datetime(2012, 11, 1, 4, 16, 13, tzinfo=<FixedOffset '-04:00'>)
iso8601非常小。比较一下python-dateutil的148KB。
iso8601
python-dateutil
从Python 3.2开始,Python可以处理简单的基于偏移量的时区,并且%z将解析时间戳中的-hhmm和+hhmm时区偏移量。这意味着对于ISO 8601时间戳,您必须删除时区中的::
%z
-hhmm
+hhmm
:
>>> from datetime import datetime >>> iso_ts = '2012-11-01T04:16:13-04:00' >>> datetime.strptime(''.join(iso_ts.rsplit(':', 1)), '%Y-%m-%dT%H:%M:%S%z') datetime.datetime(2012, 11, 1, 4, 16, 13, tzinfo=datetime.timezone(datetime.timedelta(-1, 72000)))
在Python issue 15873中正在跟踪缺少正确的ISO 8601解析。
原始问题中的代码有两个问题:时区中不应该有:,而“时区作为偏移量”的格式字符串是小写%z而不是大写%Z。
%Z
在Python v3.6
>>> from datetime import datetime >>> t = datetime.strptime("2012-11-01T04:16:13-0400", "%Y-%m-%dT%H:%M:%S%z") >>> print(t) 2012-11-01 04:16:13-04:00
下面是使用dateutil包的datetime对象的PythonDoc。。
from dateutil.parser import parse get_date_obj = parse("2012-11-01T04:16:13-04:00") print get_date_obj
从Python 3.7开始,
datetime.datetime.fromisoformat()
可以处理您的格式:在较旧的Python版本中,如果没有大量的人工时区定义,就不能这样做。
Python不包括时区数据库,因为它会很快过时。相反,Python依赖外部库来为您提供正确配置的时区,外部库的发布周期要快得多。
作为副作用,这意味着时区解析也需要是一个外部库。如果} ,它将很好地解析您的特定格式:
dateutil
对您来说太重,请改用^{iso8601
非常小。比较一下python-dateutil
的148KB。从Python 3.2开始,Python可以处理简单的基于偏移量的时区,并且
%z
将解析时间戳中的-hhmm
和+hhmm
时区偏移量。这意味着对于ISO 8601时间戳,您必须删除时区中的:
:在Python issue 15873中正在跟踪缺少正确的ISO 8601解析。
原始问题中的代码有两个问题:时区中不应该有
:
,而“时区作为偏移量”的格式字符串是小写%z
而不是大写%Z
。在Python v3.6
下面是使用dateutil包的datetime对象的PythonDoc。。
相关问题 更多 >
编程相关推荐