将带有时区的Python datetime转换为字符串

17

我有一个日期时间元组,格式如下:datetime.datetime(2010, 7, 1, 0, 0, tzinfo=<UTC>)

如何将其转换为日期时间字符串,例如2008-11-10 17:53:59

我真的只是在tzinfo部分遇到了困难。

strftime("%Y-%m-%d %H:%M:%S")没有tzinfo部分也可以正常工作。


如果您正在使用python3,请使用'%z'。参考链接:https://dev59.com/6V8e5IYBdhLWcg3wCGu_ - sobolevn
<符号导致了一个无效的语法错误。 - Brian McCall
strftime("%Y-%m-%d %H:%M:%S") 对我来说很好用。你能举个例子说明时间元组是如何构造的,以及你遇到了什么错误吗? - Allen Qin
这会有所帮助 http://www.saltycrane.com/blog/2009/05/converting-time-zones-datetime-objects-python/ - Bijoy
我从查询datetime.datetime(2010, 7, 1, 0, 0, tzinfo=<UTC>)中得到了这个结果,但我不确定元组是如何创建的。 - Brian McCall
1个回答

22
你看起来正在做的方式,对于带有时区信息和不带时区信息的日期时间对象都能正常工作。如果你想将时区也添加到字符串中,可以使用 %z 或 %Z 添加,或者使用 isoformat 方法:

你似乎采用的方法可以适用于具有时区意识和没有时区意识的日期时间对象。如果你想在字符串中添加时区信息,你可以使用 %z 或 %Z 直接添加,或者使用 isoformat 方法:

>>> from datetime import timedelta, datetime, tzinfo

>>> class UTC(tzinfo):
...     def utcoffset(self, dt):
...         return timedelta(0)
... 
...     def dst(self, dt):
...         return timedelta(0)
... 
...     def tzname(self,dt):
...          return "UTC"

>>> source = datetime(2010, 7, 1, 0, 0, tzinfo=UTC())
>>> repr(source)
datetime.datetime(2010, 7, 1, 0, 0, tzinfo=<__main__.UTC object at 0x1054107d0>)

# %Z outputs the tzname
>>> source.strftime("%Y-%m-%d %H:%M:%S %Z")
'2010-07-01 00:00:00 UTC'

# %z outputs the UTC offset in the form +HHMM or -HHMM
>>> source.strftime("%Y-%m-%d %H:%M:%S %z")
'2010-07-01 00:00:00 +0000'

# isoformat outputs the offset as +HH:MM or -HH:MM
>>> source.isoformat()
'2010-07-01T00:00:00+00:00'

2
我不知道 isoformat 方法,确实非常有用。谢谢分享。 - J0ANMM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接