時間を10分単位で丸める処理を書きたい!
例えば
05時34分 → 05時30分
10時13分 → 10時10分
とする関数が欲しくなりました。そもそも10分でまるめるという日本語合ってますかね?
適当に調べて書いた自分のコードがこちら
自分で書いた.py
import datetime
from datetime import timedelta
def ten_minutes_rounder(t):
return (t.replace(second=0, microsecond=0, minute=0, hour=t.hour) + timedelta(minutes=round(t.minute, -1)))
dt = datetime.datetime.now()
rounded_time = ten_minutes_rounder(dt)
print(rounded_time)
これで結果は正しそうです
2023/02/18追記
これだと若干挙動が間違ってました。
コメントで指摘をいただきました。pythonのroundは四捨五入ではなく偶数丸めのようです。たとえば25分のときは30分を返してほしいのですが、20分を返してしまいます。なので結局素直にChatGPT様にコードを書いてもらうほうが良さそうです。
もしかしてChatGPT君ならもっと良いコードが書ける?
この程度ならChatGPTにまかせてよかったのでは?と思ったのでChatGPTに聞いてみたところ…
この様に帰ってきました。
chat_gpt.py
import datetime
def round_time_to_nearest_10min(dt):
minute = dt.minute
delta = (minute + 5) // 10 * 10 - minute
return dt + datetime.timedelta(minutes=delta)
dt = datetime.datetime.now()
rounded_time = round_time_to_nearest_10min(dt)
print(rounded_time)
これでも問題ないのですが、返り値が2023-02-01 09:10:08.965311
と秒数まで丸めていないので(特に丸める必要はなかったのですが…)
chat_gpt_2.py
def round_time_to_nearest_10min(dt):
minute = dt.minute
delta = (minute + 5) // 10 * 10 - minute
rounded_dt = dt + datetime.timedelta(minutes=delta)
return rounded_dt.replace(second=0, microsecond=0)
dt = datetime.datetime.now()
rounded_time = round_time_to_nearest_10min(dt)
print(rounded_time)
と指示通りにコードを直してくれました。
書いてくれたコードしては自分のほうがコード量は少ないですが
- ライブラリを少なく済ませている
- メソッド名が自分のより明確
と敗北を喫しました。
このレベルのコードならChatGPTにまず書かせたほうが早そうです。