web-dev-qa-db-ja.com

日付時刻文字列を解析してDjango DateTimeField

DateTimeField型のフィールドを含むモデルを持つDjangoアプリがあります。
2008-04-10 11:47:58-05の形式でWebからデータを取得しています。
この例の最後の3文字はタイムゾーンだと思います。
DateTimeFieldでそのデータを保存するにはどうすればよいですか。2つの間で簡単に変換できますか?上記の形式の文字列を単純に含むようにDateTimeFieldを設定すると、ValidationErrorがスローされます。

ありがとうございました!

29
user1094786

使用できます

import dateutil.parser
dateutil.parser.parse('2008-04-10 11:47:58-05')

(DateTimeFieldに割り当てることができる)日時を返します。

42
nisc

Djangoの実装 を使用することもできます。 Djangoのパーサーがフォーマットを処理できない場合、私は実際にそれを好み、他のものだけを使用します。

例えば:

>>> from Django.utils.dateparse import parse_datetime
>>> parse_datetime('2016-10-03T19:00:00')
datetime.datetime(2016, 10, 3, 19, 0)
>>> parse_datetime('2016-10-03T19:00:00+0200')
datetime.datetime(2016, 10, 3, 19, 0, tzinfo=<Django.utils.timezone.FixedOffset object at 0x8072546d8>)

不明な場合に正しいタイムゾーンに変換するには、Django.utils.timezoneのmake_awareを使用します。

したがって、最終的に、パーサーユーティリティは次のようになります。

from Django.utils.dateparse import parse_datetime
from Django.utils.timezone import is_aware, make_aware

def get_aware_datetime(date_str):
    ret = parse_datetime(date_str)
    if not is_aware(ret):
        ret = make_aware(ret)
    return ret
67
Melvyn

私はこれを使用しています:

from Django.utils.timezone import get_current_timezone
from datetime import datetime
tz = get_current_timezone()
dt = tz.localize(datetime.strptime(str_date, '%m/%d/%Y'))
10
Paul Tomblin

Django Formsを使用している場合、input_formatsDateFieldに。 DateField documentation を参照してください

任意の日付情報を解析したい場合は、 parsedatetime のようなものを使用して、Djangoバリデーターに到達する前に解析を行うために呼び出します。( this SO answer を参照してください)それら)

3
RyanWilcox

Django DateTimeFieldは "%Y-%m-%dT%H:%M:%S.%fZ"の文字列形式です。したがって、strptime()またはこの形式を使用したstrptime()。

例えば。文字列形式の値(2016-10-03T19:00:00.999Z)の場合、Django datetimeオブジェクトとして次のように変換できます。

from datetime import datetime

datetime_str = '2016-10-03T19:00:00.999Z'

datetime_object = datetime.strptime(datetime_str, "%Y-%m-%dT%H:%M:%S.%fZ")
0
RameshD