0

Pythonでdatetimeに変換しようとしている次の文字列があります

django テンプレートから、次の日付形式を取得しています。

2013 年 7 月 1 日深夜

上記の文字列を日時形式に変換しようとしています

date_object = datetime.strptime(x, '%B %d, %Y, %I:%M %p')

フォーマットエラーをスローします

時間データ '2013 年 7 月 1 日午前 0 時' は形式 '%B %d, %Y, %I:%M %p' と一致しません

4

2 に答える 2

2

あなたのベストショットは、おそらくparsedatetimeモジュールです。

これがあなたの例です:

>>> import parsedatetime
>>> cal = parsedatetime.Calendar()
>>> cal.parse('July 1, 2013, midnight')
((2013, 7, 1, 0, 0, 0, 0, 245, 0), 3)

cal.parse()2 つの項目のタプルを返します。メソッドの docstring で説明されているように、1 つ目は変更されたparsedatetime.Calendarオブジェクト、2 つ目は整数です。parse

  • 0 = まったく解析されない
  • 1 = C{date} として解析
  • 2 = C{time} として解析
  • 3 = C{datetime} として解析

について一言strptime:

strptime 「真夜中」を理解することはできませんが、次のようなものを使用して、実際の時間に置き換えることができます。

def fix_dt(raw_date):
    """Replace 'midnight', 'noon', etc."""
    return raw_date.replace('midnight', '0').replace('noon', '12')

def parse_dt(raw_date):
    """Parse the fuzzy timestamps."""
    return datetime.datetime.strptime(fix_dt(raw_date), '%B %d, %Y, %H')

それで:

>>> parse_dt('July 1, 2013, midnight')
datetime.datetime(2013, 7, 1, 0, 0)

strfti.meで再生して、どれが自分のフォーマットに一致するかを確認できます。

この他の質問をチェックしてください。答えは、あなたの例のようなあいまいなタイムスタンプを解析するためにparsedatetimepyparsingを使用することを提案しています。この pyparsing wiki pageも確認してください。

于 2013-09-02T01:36:17.060 に答える
0

日付と日時の開始時刻を組み合わせることもできます。

from datetime import datetime, date
dt = date.today()
print(datetime.combine(dt, datetime.min.time()))
于 2021-06-22T07:41:42.473 に答える