咨询: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
相关产品推荐
相关产品推荐

