2017-07-10 6 views
0

current timeにはpythonコードがあります。今度は60分に切り捨てて、8:20の場合は8:00に丸めますが、8:31の場合は9:00に四捨五入する必要があります。 this SO answerに基づいて、私はこれを試してみましたが、それは私にエラーを与える:私が得るdatetime.timeを四捨五入してエラーが発生しました。

def roundTime(dt=None, roundTo=60): 
    """Round a datetime object to any time laps in seconds 
    dt : datetime.datetime object, default now. 
    roundTo : Closest number of seconds to round to, default 1 minute. 
    Author: Thierry Husson 2012 - Use it as you want but don't blame me. 
    """ 
    if dt == None : dt = datetime.datetime.now() 
    seconds = (dt.replace(tzinfo=None) - dt.min).seconds 
    rounding = (seconds+roundTo/2) // roundTo * roundTo 
    return dt + datetime.timedelta(0,rounding-seconds,-dt.microsecond) 

def round_time(): 
    td = datetime.datetime.time(datetime.datetime.now()) 
    print(roundTime(td, roundTo=60 * 60)) 

エラーがTypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'です。どのようにこのエラーと時間のラウンドを解決することができますか?これを達成するためのより簡単な方法があれば教えてください。

その他の関連質問:私は時間を四捨五入すると、丸め時間から3時間後の時間も求められます。 +操作はここで動作しますか?

答えて

1

datetime.datetime.timeround_time()内の関数を取り出し、それが動作します:

def round_time(): 
    td = datetime.datetime.now() 
    res = roundTime(td, roundTo=60 * 60).time() 
    print(res) 

あなたは3時間以上にしたい場合は、timedelta使用することができます:roundTime(dt=None, roundTo=60)にあなたが以下に変更する必要があり、ちなみに

def round_time(): 
    td = datetime.datetime.now() + datetime.timedelta(hours=3) // plus 3 more hours 
    res = roundTime(td, roundTo=60 * 60).time() 
    print(res) 

をあなたが送っていない現在の時間の正解を得るためにdt

def roudTime(dt=None, roundTo = 60*60): 
1

関数のコメントに記載されているとおり、dt変数はdatetime.datetimeオブジェクトでなければなりません(datetime.timeオブジェクトではありません)。

def round_time(): 
    dt = datetime.datetime.now() 
    dt_rounded = roundTime(dt, roundTo=60 * 60) 
    time_rounded = dt_rounded.time() 
    print(time_rounded) 
関連する問題