以不带毫秒的 ISO 格式打印日期时间
Print datetime in ISO format without milliseconds
我正在尝试在 API 中序列化日期时间,但我不想要毫秒。我要的是这里: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'
后一个几乎是完美的,除了时区部分缺少冒号。如何在不进行字符串操作(删除毫秒或添加冒号)的情况下解决此问题?
您可以将微秒替换为 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)
我正在尝试在 API 中序列化日期时间,但我不想要毫秒。我要的是这里: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'
后一个几乎是完美的,除了时区部分缺少冒号。如何在不进行字符串操作(删除毫秒或添加冒号)的情况下解决此问题?
您可以将微秒替换为 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)