在python中四舍五入到最接近的30分钟

2024-03-28 12:09:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的代码。

我想把时间凑到一小时内最接近的30分钟。例如:12:00PM或12:30PM等等。

EASTERN_NOW = timezone.localtime(timezone.now() + timedelta(minutes=30))

TIME = datetime.time(EASTERN_NOW.time().hour, EASTERN_NOW.time().minute).strftime(
    VALID_TIME_FORMATS[2])

提前谢谢


Tags: 代码datetimetime时间nowtimedeltatimezone小时
3条回答

你可以把你的分钟除以30,再乘以30得到0,30或60分钟:

date = datetime.datetime(2015, 9, 22, 12, 35)
approx = round(date.minute/30.0) * 30

date = date.replace(minute=0)
date += datetime.timedelta(seconds=approx * 60)
time = date.time()
print(time.strftime('%H:%M'))
# prints '13:30'

我正在使用datetime对象,因为timedelta不适用于时间对象。最后,您可以使用date.time()获得时间。

向上取整至最接近的30分钟:

#!/usr/bin/env python3
from datetime import datetime, timedelta

def ceil_dt(dt, delta):
    return dt + (datetime.min - dt) % delta

now = datetime.now()
print(now)    
print(ceil_dt(now, timedelta(minutes=30)))

The formula is suggested by @Mark Dickinson (for a different question)

输出

2015-09-22 19:08:34.839915
2015-09-22 19:30:00

注意:如果输入是时区感知的datetime对象,例如EASTERN_NOW,则如果要保留舍入的本地时间并附加正确的tzinfo,则应调用timezone.make_aware(rounded_dt.replace(tzinfo=None)),否则,如果舍入跨越DST边界,则可能会得到错误的时区信息。或者为了避免不明确的本地时间失败,请手动调用.localize()

localize = getattr(rounded_dt.tzinfo, 'localize', None)
if localize:
   rounded_dt = localize(rounded_dt.replace(tzinfo=None),
                         is_dst=bool(rounded_dt.dst()))

你可以把日期时间输入分开,然后调整时间

 def ajustTime():

from datetime import datetime

mytime= datetime.now().strftime("%Y-%m-%d %H-%M")

m = mytime.split()

hours, mints = m[1].split('-')

if 15 <= int(mints) <= 45:
    mints = ':30'
elif int(mints) < 15:
    mints = ':00'
elif int(mints) > 45:
    mints = ':00'
    h = int(hours) + 1
    hours = str(h)

print(m[0] + " " + hours + mints)

调整时间()

输出

2015-09-22 15:42:03.587633

2015-09-22 15:30

2015-09-22 15:46:01.956860

2015-09-22 16:00

相关问题 更多 >