14

アイソフォーマットの多数の日時文字列を含むテキスト ファイルがあります。文字列は次のようになります。

'2009-02-10 16:06:52.598800'

これらの文字列は、 を使用して生成されstr(datetime_object)ました。str(datetime_object)問題は、datetime オブジェクトのマイクロ秒がゼロに設定されていて、一部の文字列が次のようになっている場合に、何らかの理由でが異なる形式を生成することです。

'2009-02-10 16:06:52'

これらの文字列を解析して日時オブジェクトに変換するにはどうすればよいですか?

マイクロ秒を含め、オブジェクト内のすべてのデータを取得することが非常に重要です。

注: Python 2.5を使用する必要があります。マイクロ秒のフォーマット ディレクティブ%fは 2.5 には存在しません。

4

4 に答える 4

21

または:

from datetime import datetime

def str2datetime(s):
    parts = s.split('.')
    dt = datetime.strptime(parts[0], "%Y-%m-%d %H:%M:%S")
    return dt.replace(microsecond=int(parts[1]))

それ自体を使用strptimeして日付/時刻文字列を解析します (したがって、正規表現の特殊なケースを考える必要はありません)。

于 2009-02-10T06:16:21.457 に答える
11

dateutil モジュールを使用します。Python に組み込まれているものよりもはるかに広い範囲の日付と時刻の形式をサポートしています。

次のコードを機能させるには、easy_install dateutilが必要です。

from dateutil.parser import parser

p = parser()
datetime_with_microseconds = p.parse('2009-02-10 16:06:52.598800')
print datetime_with_microseconds.microsecond

結果:

598799
于 2009-02-10T06:23:30.283 に答える
5

誰かがすでにこの問題でバグを報告しています: Issue 1982。これは python 2.5 で動作するために必要なので、手動で値を解析してから datetime オブジェクトを操作する必要があります。

于 2009-02-10T06:07:10.697 に答える
2

最善の解決策ではないかもしれませんが、正規表現を使用できます。

m = re.match(r'(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})(?:\.(\d{6}))?', datestr)
dt = datetime.datetime(*[int(x) for x in m.groups() if x])
于 2009-02-10T06:14:45.767 に答える