以ISO格式打印日期时间,不需要毫秒



我试图在API中序列化datetime,但我不想要毫秒。我想要的是这里:https://en.wikipedia.org/wiki/ISO_8601 - "2015-09-14T17:51:31+00:00"

tz = pytz.timezone('Asia/Taipei')
dt = datetime.datetime.now()
loc_dt = tz.localize(dt)

试一试:

loc_dt.isoformat()
>> '2015-09-17T10:46:15.767000+08:00'

试试B:

loc_dt.strftime("%Y-%m-%dT%H:%M:%S%z")
>> '2015-09-17T10:46:15+0800'

后一个几乎是完美的,除了它在时区部分缺少冒号。如何在没有字符串操作(删除毫秒或添加冒号)的情况下解决这个问题?

您可以使用isoformat:

将微秒替换为0。
import pytz
from datetime import datetime
tz = pytz.timezone('Asia/Taipei')
dt = datetime.now()
loc_dt = tz.localize(dt).replace(microsecond=0)
print loc_dt.isoformat()
2015-09-17T19:12:33+08:00

如果您希望保持loc_dt不变,请在输出时进行替换:

loc_dt = tz.localize(dt)
print loc_dt.replace(microsecond=0).isoformat()

如前所述,您最好将tz传递给datetime.now:

 dt = datetime.now(tz)

原因在pep-0495中讨论过,您可能还希望在执行替换时添加一个断言来捕获任何错误:

 ssert loc_dt.resolution >= timedelta(microsecond=0)

python 3.6开始,datetime.isoformat接受timespec关键字来选择精度。这个参数给出了您希望包含在输出中的最小时间单位:

>>> loc_dt.isoformat()
'2022-10-21T19:59:59.991999+08:00'
>>> loc_dt.isoformat(timespec='seconds')
'2022-10-21T19:59:59+08:00'
>>> loc_dt.isoformat(timespec='milliseconds')
'2022-10-21T19:59:59.991+08:00'

注意时间是如何被截断的,而不是四舍五入的。

您也可以使用timespec来删除秒/分:

>>> loc_dt.isoformat(timespec='minutes')
'2022-10-21T19:59+08:00'
>>> loc_dt.isoformat(timespec='hours')
'2022-10-21T19+08:00'

这些都假设您事先运行了以下设置脚本:

from datetime import datetime
import pytz
tz = pytz.timezone('Asia/Taipei')
dt = datetime.now()
loc_dt = tz.localize(dt)

还要注意,这在没有时区的情况下也可以工作:

>>> from datetime import datetime
>>> now = datetime.now()
>>> now.isoformat(timespec='minutes')
>>> '2022-10-21T19:59'

相关内容

  • 没有找到相关文章