【发布时间】:2023-01-14 02:02:51
【问题描述】:
我需要一个 Python3 函数来将 DateTime 对象向下舍入到最接近的 5 分钟。是的,这已在之前的 SO 帖子 here 和 here 甚至 here 中讨论过,但我没有运气实施他们的解决方案。注意:我可以不是使用熊猫
我想要一个函数,给定以下 DateTime (%Y%m%d%H%M) 对象,返回以下内容:
INPUT OUTPUT
202301131600 202301131600
202301131602 202301131600
202301131604 202301131600
202301131605 202301131605
202301131609 202301131605
202301131610 202301131610
这是我的代码,使用 timedelta 作为机制:
from datetime import datetime
from datetime import timedelta
def roundDownDateTime(dt):
# Arguments:
# dt DateTime object
delta = timedelta(minutes=5)
return dt - (datetime.min - dt) % delta
tmpDate = datetime.now()
# Print the current time and then rounded-down time:
print("\t"+tmpDate.strftime('%Y%m%d%H%M')+" --> "+(roundDownDateTime(tmpDate)).strftime('%Y%m%d%H%M') )
这是我多次测试代码时的一些输出:
202301131652 --> 202301131650
202301131700 --> 202301131655
202301131701 --> 202301131657
呃,不好!我将我的功能调整为:
def roundDownDateTime(dt):
# Arguments:
# dt DateTime object
n = dt - timedelta(minutes=5)
return datetime(year=n.year, month=n.month, day=n.day, hour=n.hour)
但那是平更差:
202301131703 --> 202301131600
202301131707 --> 202301131700
202301131710 --> 202301131700
在弄清楚这个基本的 DateTime 算术东西时,我都不敢恭维;谁能看到我的错误?
【问题讨论】:
-
我不知道
% timedelta应该做什么,但显然这对你来说是错误的方法。我会尝试直接使用会议记录。 -
@MarkRansom 谢谢马克,我编辑了我的 OP 以包括我尝试
timedelta的原因。直接处理会议记录似乎很麻烦,我有点希望有一种更简单的方法。谢谢你的建议!
标签: python-3.x datetime rounding