python - 文字列から日時変数形式

原文 python

はい、これまでのところ、文字列を日付に変換しています。

datetime.datetime.fromtimestamp(time.mktime(time.strptime(date_string, DB_TIME_FORMAT)))


しかし、私は奇妙な結果を得ています。たとえば:

date_string = '2011-08-30 12:52:57.573979'
DB_TIME_FORMAT = '%Y-%m-%d %H:%M:%S.%f'


結果は次のとおりです。

2011-08-30 12:52:57


だから私は私の最初の質問はミリ秒はどこに行ったのでしょうか?

私の2番目の質問は、「動的な」文字列から時間への変換を行う方法があるかどうかです。つまり、前の例の形式で、ミリ秒が存在しない場合、ValueErrorを取得するのではなく、通常の日付を返す場合を考えてみましょう。秒が同じ状況を欠いている場合などは?

よろしく、
ボグダン
答え
strptimeはミリ秒フィールドのないtime tupleを返し、秒を整数として格納するため、ミリ秒がありません。それ以降、結果にはミリ秒がありません。ミリ秒を取得する適切な方法は、次のように、datetimeモジュールのstrptimeを使用することです。

parsed = datetime.datetime.strptime(date_string, DB_TIME_FORMAT)


とにかく日付時刻を取得する必要があるように見えるため、これによってソリューションも簡略化されます。

受け入れられたフォーマットでリラックスしている限り、Pythonでは簡単ではありません。その日付/時刻モジュールには、一部の言語のように「自動検出」はありません。サードパーティのライブラリを使用しない場合は、例外をキャッチして別の形式で再試行するのが最善だと思います。例えば:

from datetime import datetime
try: parsed = datetime.strptime(date_string, DB_TIME_FORMAT)
except ValueError:
    parsed = datetime.strptime(date_string, DB_TIME_FORMAT_WITHOUT_MILLISECONDS)


そして、欠けている秒などのレベルを追加できます。
関連記事

python - Pythonでユニコード文字のリストをヘブライ文字列に変換する

python - Python executorの作成に関する問題

python - 孫ではなく子供のCPU使用率を測定する

python - 極座標プロットのエラーバーがmatplotlibの角度で回転しません

python - ユーザー定義クラスに異なる名前を使用すると、2つのPythonスクリプトの動作が異なる

python - python +セキュリティ

python - エキスパンダーラベルのPangoマークアップ

python - インポートされたメソッドにローカル変数を使用させる

python - AppEngine Task Queue API呼び出しがTaskAlreadyExistsErrorで増加する

python - Pyramid 1.1とMongodbを統合する方法-できるだけ少ない行