結果をフォーマットして返す
このステップでは、過去と未来の日付をフォーマットし、文字列のリストとして返す方法を学びます。
time_travel_destination(time: str, days: int)
関数の中に、過去と未来の日付をフォーマットし、リストとして返すための次のコードを追加します。
return [past_time.strftime("%d-%m-%Y"), future_time.strftime("%d-%m-%Y")]
strftime()
メソッドは、past_time
と future_time
の datetime.date
オブジェクトを "dd-mm-yyyy" 形式の文字列にフォーマットするために使用されます。
- 最後に、関数の実行中に発生する可能性のある
ValueError
または OverflowError
例外をキャッチするための例外処理ブロックを追加します。
except (ValueError, OverflowError):
return []
これらの例外のいずれかが発生した場合、関数は空のリストを返します。
最終的な time_travel_destination(time: str, days: int)
関数は次のようになります。
import datetime
def time_travel_destination(time: str, days: int):
try:
## 日付文字列をから年、月、日を抽出する
year, month, day = map(int, time.split("-"))
## 日付が有効かどうかを確認する
datetime.date(year, month, day)
try:
## 与えられた日付から指定された日数を引く
past_time = datetime.date(year, month, day) - datetime.timedelta(days=days)
except OverflowError:
## OverflowError が発生した場合、past_time を最小の表現可能な日付に設定する
past_time = datetime.date(1, 1, 1)
## 与えられた日付に指定された日数を加える
future_time = datetime.date(year, month, day) + datetime.timedelta(days=days)
## 'dd-mm-yyyy' 形式で過去と未来の日付を返す
return [past_time.strftime("%d-%m-%Y"), future_time.strftime("%d-%m-%Y")]
except (ValueError, OverflowError):
## ValueError または OverflowError が発生した場合、空のリストを返す
return []
これで、time_travel_destination(time: str, days: int)
関数の実装が完了しました。time_travel_destination.py
ファイルのメインブロックで提供されている例を実行することで、関数をテストできます。以下にいくつかの例を示します。
print(time_travel_destination('2238-2-11', 30))
print(time_travel_destination('2238-2-11', 0))
print(time_travel_destination('2238-2-11', 100))
['12-01-2238', '13-03-2238']
['11-02-2238', '11-02-2238']
['03-11-2237', '22-05-2238']