Pythonで日付の入力をした際、「そんな日付がちゃんと存在しているのか」妥当性チェックを行いたいことがあったため、そのやり方をメモ。
調べた感じいくつかやり方がありましたが、簡単そうなのが以下だったためこれを参考に。
底辺情報系学生の雑記。プログラミングTIPSとか日々の雑記その他。ゆっくりしていってね。…
※try文がわからない人は以下を参照。
元記事だけだと判定結果がわかりづらいこと、日付が妥当だった場合の処理が書きにくかったためif文で条件分岐などもさせました。
以下そのままコピペして実行すれば使えるかと思います。
from calendar import day_abbr
import datetime
def checkDate(year,month,day):
try:
newDataStr="%04d/%02d/%02d"%(year,month,day)
newDate=datetime.datetime.strptime(newDataStr,"%Y/%m/%d")
return True
except ValueError:
return False
year=int(input("西暦を入力してください。"))
month=int(input("月を入力してください。"))
day=int(input("日を入力してください。"))
bool=checkDate(year,month,day)
if bool==True:
hiduke=str(year)+"/"+str(month)+"/"+str(day)
print("この日は存在します。")
print("この日は"+hiduke+"です。")
else:
print("この年月日は存在しません。")
上記を実行した結果が以下になります。
※~を入力してくださいの後ろにある数字はinput()での入力です。
西暦を入力してください。2022
月を入力してください。8
日を入力してください。3
この日は存在します。
この日は2022/8/3です。
ちなみにコマンドライン引数でやる場合はこんな感じです。
from calendar import day_abbr
import datetime
import sys
def checkDate(year,month,day):
try:
newDataStr="%04d/%02d/%02d"%(year,month,day)
newDate=datetime.datetime.strptime(newDataStr,"%Y/%m/%d")
return True
except ValueError:
return False
args = sys.argv
year=int(args[1])
month=int(args[2])
day=int(args[3])
bool=checkDate(year,month,day)
if bool==True:
hiduke=str(year)+"/"+str(month)+"/"+str(day)
print("この日は存在します。")
print("この日は"+hiduke+"です。")
else:
print("この年月日は存在しません。")
以下が結果。
この日は存在します。
この日は2022/8/3です。