python 如何按分钟舍入时间戳?

python how to round a timestamp by minute?

大家好我正在使用这两个函数

def utc_to_local(utc_dt):
    return utc_dt.replace(tzinfo=tz.gettz('UTC')).astimezone(tz.gettz('America/New_York'))


def perdelta(start, end, delta):
    curr = start
    while curr < end:
        yield curr
        curr += delta

for result in perdelta(utc_to_local(datetime.datetime.utcnow()- datetime.timedelta(minutes= 120)),utc_to_local(datetime.datetime.utcnow()- datetime.timedelta(minutes=60)), datetime.timedelta(minutes=1)):
    print(result)

此代码的结果为我提供了我想要的时间戳列表

2021-02-02 19:00:03.438953-05:00
2021-02-02 19:01:03.438953-05:00
2021-02-02 19:02:03.438953-05:00
2021-02-02 19:03:03.438953-05:00
2021-02-02 19:04:03.438953-05:00
2021-02-02 19:05:03.438953-05:00
2021-02-02 19:06:03.438953-05:00
2021-02-02 19:07:03.438953-05:00
2021-02-02 19:08:03.438953-05:00
2021-02-02 19:09:03.438953-05:00
2021-02-02 19:10:03.438953-05:00
2021-02-02 19:11:03.438953-05:00
2021-02-02 19:12:03.438953-05:00
2021-02-02 19:13:03.438953-05:00
2021-02-02 19:14:03.438953-05:00
2021-02-02 19:15:03.438953-05:00
2021-02-02 19:16:03.438953-05:00
2021-02-02 19:17:03.438953-05:00
2021-02-02 19:18:03.438953-05:00
2021-02-02 19:19:03.438953-05:00
2021-02-02 19:20:03.438953-05:00
2021-02-02 19:21:03.438953-05:00
2021-02-02 19:22:03.438953-05:00
2021-02-02 19:23:03.438953-05:00
2021-02-02 19:24:03.438953-05:00
2021-02-02 19:25:03.438953-05:00
2021-02-02 19:26:03.438953-05:00
2021-02-02 19:27:03.438953-05:00
2021-02-02 19:28:03.438953-05:00
2021-02-02 19:29:03.438953-05:00
2021-02-02 19:30:03.438953-05:00
2021-02-02 19:31:03.438953-05:00
2021-02-02 19:32:03.438953-05:00
2021-02-02 19:33:03.438953-05:00
2021-02-02 19:34:03.438953-05:00
2021-02-02 19:35:03.438953-05:00
2021-02-02 19:36:03.438953-05:00
2021-02-02 19:37:03.438953-05:00
2021-02-02 19:38:03.438953-05:00
2021-02-02 19:39:03.438953-05:00
2021-02-02 19:40:03.438953-05:00
2021-02-02 19:41:03.438953-05:00
2021-02-02 19:42:03.438953-05:00
2021-02-02 19:43:03.438953-05:00
2021-02-02 19:44:03.438953-05:00
2021-02-02 19:45:03.438953-05:00
2021-02-02 19:46:03.438953-05:00
2021-02-02 19:47:03.438953-05:00
2021-02-02 19:48:03.438953-05:00
2021-02-02 19:49:03.438953-05:00
2021-02-02 19:50:03.438953-05:00
2021-02-02 19:51:03.438953-05:00
2021-02-02 19:52:03.438953-05:00
2021-02-02 19:53:03.438953-05:00
2021-02-02 19:54:03.438953-05:00
2021-02-02 19:55:03.438953-05:00
2021-02-02 19:56:03.438953-05:00
2021-02-02 19:57:03.438953-05:00
2021-02-02 19:58:03.438953-05:00
2021-02-02 19:59:03.438953-05:00
2021-02-02 20:00:03.438953-05:00

但我想要实现的是将每个时间戳舍入到最近的分钟。例如,我希望将 19:00:03.43895319:01:03.43895319:02:03.43895319:03:03.438953 转换为 19:00:0019:01:0019:02:00。 .., ... 等等到最后的时间戳。我还没有弄清楚如何实现这一点。有什么想法吗?

您可以使用datetime.datetime.replace(microsecond=0)
示例:

import datetime
from dateutil import tz
now = datetime.datetime.now()
print(now.replace(tzinfo=tz.gettz('UTC')).astimezone(tz.gettz('America/New_York'))) 
# > 2021-02-03 04:47:55.259843-05:00
print(now.replace(tzinfo=tz.gettz('UTC')).astimezone(tz.gettz('America/New_York')).replace(microsecond=0))
# > 2021-02-03 04:47:55-05:00