【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')}") # 時刻部分だけをフォーマットして表示