由于我的应用程序的情况,我宁愿使用datetime.strptime
而不是dateutil.parser
。
看了docs之后,我认为%Y-%m-%dT%H:%M:%S%z
可能是解析这样的日期字符串的正确格式。但这仍然给我一个错误。
from datetime import datetime
d = '0000-00-00T00:00:00+00:00'
datetime.strptime(d, '%Y-%m-%dT%H:%M:%S%z')
ValueError: time data '0000-00-00T00:00:00+00:00' does not
match format '%Y-%m-%dT%H:%M:%S%z'
答案 0 :(得分:1)
处理时区的最简单方法是使用dateutil.parser
:
from dateutil.parser import parse
date_obj = parse('1970-01-01T00:00:00+00:00')
date_obj
> datetime.datetime(1970, 1, 1, 0, 0, tzinfo=tzutc())
但是您必须传递一个有效的datetime-value(不仅是零...)
如果您想使用strptime()
,则时区必须采用0000
而非00:00
的格式,因此可以使用:
d = '1900-02-05T11:43:32+0000'
datetime.strptime(d, '%Y-%m-%dT%H:%M:%S%z')
> datetime.datetime(1900, 2, 5, 11, 43, 32, tzinfo=datetime.timezone.utc)
答案 1 :(得分:0)
我不确定您要如何处理您的代码,但由于格式错误而未给出错误,但由于'0000-00-00T00:00:00+00:00'
不是有效时间,因为零不是日期。如果您尝试使用类似'1900-01-01T00:00:00+00:00'
的其他时间,它应该可以正常工作。
答案 2 :(得分:0)
回复很晚,但为了后代,如果你真的想用 strptime
解析它,你可以使用 %z
https://intellipaat.com/community/58366/the-strptime-example-for-datetime-with-tz-offset
示例:
datetime_string = "2021-01-01T10:25:00+00:00"
obj = datetime.strptime(datetime_string, "%Y-%m-%dT%H:%M:%S%z")
print(repr(obj))
>>> datetime.datetime(2021, 1, 1, 10, 25, tzinfo=datetime.timezone.utc)
datetime_string = datetime.strftime(obj, "%Y-%m-%dT%H:%M:%S%z")
print(datetime_string)
>>> 2021-01-01T10:25:00+0000
尽管注意偏移量现在显示为 +0000
,这对您来说可能已经足够了。
如果您仍然坚持输出为 ISO 8601 格式,并坚持使用 strftime
将格式恢复为 +00:00,则您必须使用自定义 tzinfo
对象。< /p>
示例:
class TZ1(tzinfo):
def utcoffset(self, dt): return timedelta(hours=0)
def dst(self, dt): return timedelta(0)
def tzname(self, dt): return "+00:00"
datetime_string = "2021-01-01T10:25:00+00:00"
obj = datetime.strptime(datetime_string, "%Y-%m-%dT%H:%M:%S%z").replace(tzinfo=TZ1())
>>> datetime.datetime(2021, 1, 1, 10, 25, tzinfo=<__main__.TZ1 object at 0x7ff6e1c41f50>)
datetime_string = datetime.strftime(obj, "%Y-%m-%dT%H:%M:%S%Z")
print(datetime_string)
>>> 2021-01-01T10:25:00+00:00
此示例显然是针对 UTC+0 硬编码的,但您可以根据需要应用一些基于 dt
参数的逻辑。
如果您在来自不可信来源的数据处理中为日期和时间设置严格的规则,以用于验证、强制等,则此方法非常有用(与 dateutil
库中的魔法相反) . 因为您可以设置刚性输入和输出。