You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:Python datetime计算当前日期前30天时如何将毫秒截断至3位

解决datetime截断3位毫秒的问题

嘿,我来帮你搞定这个问题!你代码里的问题在于:你先对当前时间做了毫秒截断,但后面又重新给datetime_limit赋值成了未处理的30天前时间,直接覆盖了之前的截断操作,所以才没得到想要的结果。

这里给你两种靠谱的解决方案:

方案1:先计算时间差,再格式化时截断毫秒

这是最直接的方式,先算出30天前的时间对象,再通过格式化字符串截取3位毫秒:

from datetime import datetime, timedelta

# 第一步:计算当前时间往前推30天的datetime对象
thirty_days_ago = datetime.today() - timedelta(days=30)
# 第二步:格式化时用%f获取6位微秒,[:-3]截断为3位毫秒
datetime_limit = thirty_days_ago.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
print(datetime_limit)

原理很简单:%f会输出6位的微秒数,我们去掉最后3位,就得到了精确到毫秒(3位)的结果。

方案2:修改datetime对象的微秒值(保留datetime对象)

如果之后你还需要对这个时间进行其他datetime操作,不想转成字符串,可以直接截断datetime对象的微秒:

from datetime import datetime, timedelta

thirty_days_ago = datetime.today() - timedelta(days=30)
# 把微秒截断到3位:整除1000后再乘1000,相当于保留千分位
truncated_time = thirty_days_ago.replace(microsecond=(thirty_days_ago.microsecond // 1000) * 1000)
# 格式化输出(同样可以用[:-3],或者因为微秒已经是3位的倍数,直接输出也会是后面补零的3位)
datetime_limit = truncated_time.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
print(datetime_limit)

这种方法得到的truncated_time本身就是一个仅保留3位毫秒精度的datetime对象,后续可以直接用于时间计算、比较等操作。


内容的提问来源于stack exchange,提问作者user14736700

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 19:47:45