Open1

【Python】日付データ・strptime関数とstrftime関数

おしゅんおしゅん

学んだこと
・文字列→時刻データの変換はstrptime関数を利用する。timedelta関数と組み合わせて時間の計算を行うことができる。
・時刻→文字列データの変換はstrftime関数を利用する。計算等終わった後、希望する出力の形に調整したいときはこちら。
・モジュールとクラスの関係性について理解した。

実現したいこと
「13:00」で与えられる文字列に「1時間半」を足して「14:30」を出力させる
・まずは文字列で与えられる時刻を日付データに変換しなくてはいけない
・その後日時の計算を実行する

インプットの与えられ方

#1行目に個数が与えられる
#n行目の1列目が時刻、2列目がhours、3列目がminutesを表す
#○時間○分を加算した値を出力できるようなコードを書く。
2
15:59 0 1
23:20 1 0

最終的なコード

#標準モジュールのインポート
from datetime import datetime, timedelta

#一行目の個数を格納する
input_line = int(input())

#時刻を計算できる形に直し、再度文字列にして出力する。
while input_line>0:
    kouji = input().split(" ")
    start_time = datetime.strptime(str(kouji[0]),"%H:%M")
    end_time = start_time + timedelta(hours=int(kouji[1]),minutes=int(kouji[2]))
    print(datetime.strftime(end_time,"%H:%M"))
    input_line -= 1

以下チャットGPTから
from datetime import datetime, timedelta

time_str = "13:00"
#"%H:%M"は「時:分」の形式を表すフォーマットコード
time_object = datetime.strptime(time_str, "%H:%M").time()

print(f"変換された時刻オブジェクト: {time_object}")

結果として date オブジェクトも含まれてしまうけど、.time() をつけることで時刻部分だけを取り出せるんだ。

from datetime import datetime, timedelta

start_time_str = "13:00"

一旦今日の日付情報と結合して datetime オブジェクトにする(加算のため)

実際の日付は何でもいいけど、加算には datetime オブジェクトが必要なんだ

dummy_date = datetime.now().date()
start_datetime = datetime.strptime(f"{dummy_date} {start_time_str}", "%Y-%m-%d %H:%M")

1時間半(90分)を timedelta で表現

one_and_half_hours = timedelta(minutes=90)

時間を加算

end_datetime = start_datetime + one_and_half_hours

print(f"開始時刻: {start_time_str}")
print(f"1時間半後: {end_datetime.strftime('%H:%M')}") # 時刻部分だけをフォーマットして表示