我不得不转换时区感知串到Python datetime
对象。
例如2012-11-01T04:16:13-04:00
。
我觉得有一个dateutil
其中有一个解析函数来完成它的模块,但是我真的不希望使用它,因为它增加了一个依赖。
所以,我该怎么办呢? 我试图像下面,但没有运气。
datetime.datetime.strptime("2012-11-01T04:16:13-04:00", "%Y-%m-%dT%H:%M:%S%Z")
我不得不转换时区感知串到Python datetime
对象。
例如2012-11-01T04:16:13-04:00
。
我觉得有一个dateutil
其中有一个解析函数来完成它的模块,但是我真的不希望使用它,因为它增加了一个依赖。
所以,我该怎么办呢? 我试图像下面,但没有运气。
datetime.datetime.strptime("2012-11-01T04:16:13-04:00", "%Y-%m-%dT%H:%M:%S%Z")
对于Python 3.7, 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
太沉重,重的你,用iso8601
相反,它会分析你的具体格式就好了:
>>> 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
更是高达 4KB小。 与此相比,TOT python-dateutil
的148KB。
对于Python 3.2的Python 可以处理简单的基于偏移量的时区,和%z
将解析-hhmm
和+hhmm
在时间戳时区偏移。 这意味着,对于ISO 8601时间戳你必须删除:
在时区:
>>> 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)))
缺乏适当的ISO 8601的解析正在被跟踪的Python问题15873 。
这里是Python 文档使用dateutil包对象的日期时间..
from dateutil.parser import parse
get_date_obj = parse("2012-11-01T04:16:13-04:00")
print get_date_obj
有两个问题与原来的问题代码:不应该有一个:
在时区和格式字符串的“时区作为偏移”是小写%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
我是新来的Python,而是找到了一种方法来转换
2017-05-27T07:20:18.000-04:00
到
2017-05-27T07:20:18
,而无需下载新的应用程序。
from datetime import datetime, timedelta
time_zone1 = int("2017-05-27T07:20:18.000-04:00"[-6:][:3])
>>returns -04
item_date = datetime.strptime("2017-05-27T07:20:18.000-04:00".replace(".000", "")[:-6], "%Y-%m-%dT%H:%M:%S") + timedelta(hours=-time_zone1)
我敢肯定有更好的方法来做到这一点不切片了绳子那么多,但是这让完成任务。
您可以将这样的。
date = datetime.datetime.strptime('2019-3-16T5-49-52-595Z','%Y-%m-%dT%H-%M-%S-%f%z')
date_time = date.strftime('%Y-%m-%dT%H:%M:%S.%fZ')