LoginSignup
3
4

More than 1 year has passed since last update.

【Python】時刻を10分毎に時間を丸める処理を自分で書くかChatGPTに任せるか

Last updated at Posted at 2023-02-01

時間を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に聞いてみたところ…
image.png

この様に帰ってきました。

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と秒数まで丸めていないので(特に丸める必要はなかったのですが…)

image.png

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にまず書かせたほうが早そうです。
3
4
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4