DateTime.TryParse()
Pythonの C# に相当するものはありますか?
形式を推測するという事実ではなく、例外のスローを回避するという事実に言及しています。
例外が必要ない場合は、例外をキャッチします。
try:
d = datetime.datetime.strptime(s, "%Y-%m-%d %H:%M:%S")
except ValueError:
d = None
Python の禅では、明示的は暗黙的よりも優れています。strptime
指定された正確な形式で解析された日時を常に返します。失敗した場合の動作を定義する必要があるため、これは理にかなっています。おそらく、本当に必要なものです。
except ValueError:
d = datetime.datetime.now()
また
except ValueError:
d = datetime.datetime.fromtimestamp(0)
また
except ValueError:
raise WebFramework.ServerError(404, "Invalid date")
明示的にすることで、フェイルオーバーの動作が何であるか、それが必要なものであることを次に読む人に明確になります。
または、日付が無効になることはないと確信しているかもしれません。データベースの DATETIME 列からのものです。この場合、キャッチする例外はないため、キャッチしないでください。
いいえ、あなたが求めているのは慣用的なPythonではないので、通常、標準ライブラリにそのようなエラーを破棄する関数はありません。関連する標準ライブラリモジュールはここに文書化されています:
http://docs.python.org/library/datetime.html
http://docs.python.org/library/time.html
解析関数はすべて、無効な入力に対して例外を発生させます。
ただし、他の回答が述べているように、アプリケーション用に作成することはそれほど難しくありません(質問は「Python標準ライブラリ内」ではなく「Python内」と表現されているため、このような関数の作成を支援するかどうかは明確ではありません。 「Pythonで」は質問に答えているかどうか)。
ブルート フォースもオプションです。
def TryParse(datestring, offset):
nu = datetime.datetime.now()
retval = nu
formats = ["%d-%m-%Y","%Y-%m-%d","%d-%m-%y","%y-%m-%d"]
if datestring == None:
retval = datetime.datetime(nu.year,nu.month,nu.day,0,0,0) - datetime.timedelta(offset,0,0,0,0,0,0)
elif datestring == '':
retval = datetime.datetime(nu.year,nu.month,nu.day,0,0,0) - datetime.timedelta(offset,0,0,0,0,0,0)
else:
succes = False
for aformat in formats:
try:
retval = datetime.datetime.strptime(datestring,aformat)
succes = True
break
except:
pass
if not succes:
retval = datetime.datetime(nu.year,nu.month,nu.day,0,0,0) - datetime.timedelta(offset,0,0,0,0,0,0)
return retval
time.strptime
文字列から日付を解析するために使用します。
ドキュメント: http://docs.python.org/library/time.html#time.strptime
例: http://pleac.sourceforge.net/pleac_python/datesandtimes.html
#-----------------------------
# Parsing Dates and Times from Strings
time.strptime("Tue Jun 16 20:18:03 1981")
# (1981, 6, 16, 20, 18, 3, 1, 167, -1)
time.strptime("16/6/1981", "%d/%m/%Y")
# (1981, 6, 16, 0, 0, 0, 1, 167, -1)
# strptime() can use any of the formatting codes from time.strftime()
# The easiest way to convert this to a datetime seems to be;
now = datetime.datetime(*time.strptime("16/6/1981", "%d/%m/%Y")[0:5])
# the '*' operator unpacks the tuple, producing the argument list.
I agree tryparse is very useful function on c#. Unfortunately no equivalent direct function of that in python (may be i am not aware). I believe you want to check a string is whether date or not without worrying about date format. My recommendation is go for pandas
to_datetime
function:
def is_valid_date(str_to_validate: str) -> bool:
try:
if pd.to_datetime(str_to_validate):
return True
else:
return False
except ValueError:
return False
strptimeはどうですか?
http://docs.python.org/library/time.html#time.strptime
指定された形式に基づいて文字列を解析できない場合、ValueError がスローされます。
編集:
私がそれに答えた後、例外についてのビットを含めるように質問が編集されたので。そのことについて追記したいと思います。
他の回答で指摘されているように、プログラムで例外を発生させたくない場合は、単にキャッチして処理できます。
try:
date = datetime.datetime.strptime(s, "%Y-%m-%d %H:%M:%S")
except ValueError:
date = None
それはあなたが望むことをするPythonicの方法です。