DateTimeField型のフィールドを含むモデルを持つDjangoアプリがあります。2008-04-10 11:47:58-05
の形式でWebからデータを取得しています。
この例の最後の3文字はタイムゾーンだと思います。
DateTimeFieldでそのデータを保存するにはどうすればよいですか。2つの間で簡単に変換できますか?上記の形式の文字列を単純に含むようにDateTimeFieldを設定すると、ValidationErrorがスローされます。
ありがとうございました!
使用できます
import dateutil.parser
dateutil.parser.parse('2008-04-10 11:47:58-05')
(DateTimeFieldに割り当てることができる)日時を返します。
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
私はこれを使用しています:
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'))
Django Formsを使用している場合、input_formats
をDateField
に。 DateField documentation を参照してください
任意の日付情報を解析したい場合は、 parsedatetime のようなものを使用して、Djangoバリデーターに到達する前に解析を行うために呼び出します。( this SO answer を参照してください)それら)
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")