32

DateTime.TryParse()Pythonの C# に相当するものはありますか?

形式を推測するという事実ではなく、例外のスローを回避するという事実に言及しています。

4

8 に答える 8

26

例外が必要ない場合は、例外をキャッチします。

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 列からのものです。この場合、キャッチする例外はないため、キャッチしないでください。

于 2011-07-07T22:21:04.827 に答える
5

いいえ、あなたが求めているのは慣用的なPythonではないので、通常、標準ライブラリにそのようなエラーを破棄する関数はありません。関連する標準ライブラリモジュールはここに文書化されています:

http://docs.python.org/library/datetime.html

http://docs.python.org/library/time.html

解析関数はすべて、無効な入力に対して例外を発生させます。

ただし、他の回答が述べているように、アプリケーション用に作成することはそれほど難しくありません(質問は「Python標準ライブラリ内」ではなく「Python内」と表現されているため、このような関数の作成を支援するかどうかは明確ではありません。 「Pythonで」は質問に答えているかどうか)。

于 2011-07-31T21:19:24.910 に答える
3

ブルート フォースもオプションです。

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
于 2014-09-14T08:05:23.640 に答える
0

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.
于 2011-07-07T18:49:52.140 に答える
0

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
于 2020-04-20T02:37:20.167 に答える
-2

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の方法です。

于 2011-07-07T18:47:09.457 に答える