全体的な数学の知識不足を感じています
pythonのdatetimeモジュール
pythonのdatetime系のモジュールは活躍する機会が少ないですが、これは個人的に少ないだけで、分かる人は普通にばりばりつかっているんだろうなという感じです。
どうでもいいはなしではじまってしまいましたが、pythonのdatetimeモジュールは結構ややこしいです。オブジェクトにいくつか種類があります

- datetimeオブジェクト
- dateオブジェクト
- timeオブジェクト
- timedeltaオブジェクト
timedeltaオブジェクトは日付の計算につかいます。
それでなにがいいたいかですが、文字列を日付に変換することができるメソッドである「strptime()」がdatetimeオブジェクトじゃないと使えないってことなんです。あまり詳しく確認していませんが「dateオブジェクト」では使えませんでした。なんともややこしいです。
イベントの日まで残り何日かを求めるサンプルコード
冗長かもしれませんが、イベントの日を入力して残り何日かを計算するサンプルコードです。
import datetime as d
import re
def delta(arg_event_day):
event_day = arg_event_day
today = d.datetime.now()
delta = event_day - today
print(type(delta))
print(delta)
try:
ed = input("event_day? (yyyy/mm/dd): ")
regex_day = re.search(r'[0-9]{4}\/[0-9]+\/[0-9]+', ed)
regex_day = regex_day.group(0)
regex_day = d.datetime.strptime(regex_day, '%Y/%m/%d')
except:
print('you input key not (yyyy/mm/dd) or other miss')
delta(regex_day)
このコードは最初にイベントの日を yyyy/mm/dd の形式で日付を入力する必要があります。
2000/111/11など月がオーバーフローするとエラーが発生します。
万年の場合エラーが発生しません。しかし、正規表現の関係で、4桁の値しか取得しないため、たとえば20111年と入力した場合「0111年」となります。そのため残りの日数がマイナスになります。
9999年までは対応できるコードです(どうでもよろしい)
雑感
このコードみれば datetime系は だいたい理解できると思ったけど、そうでもない気がしてきた。

コメント