3

コンソールに警告を表示せずにコーディングしようとしています。これまでのところ、私はこの1つのケースまでそれを回避するのが得意でした。これは、私には鶏が先か卵が先かという状況のようです。

from datetime import datetime as dt 

last_contacted = "19/01/2013"
current_tz = timezone.get_current_timezone()
date_time = dt.strptime(last_contacted, get_current_date_input_format(request))
date_time = current_tz.localize(date_time)

3行目は、次の警告をスローしています。

RuntimeWarning:タイムゾーンのサポートがアクティブなときに、DateTimeFieldが単純な日時(2013-01-19 00:00:00)を受信しました。)

4行目でdatetimeオブジェクトを(タイムゾーンをサポートする)datetime対応オブジェクトに変換する前に、最初にUnicodeをdatetimeに変換する必要があるため、これは奇妙なことです。

専門家からの提案はありますか?

ありがとう

アップデート:

def get_current_date_input_format(request):
    if request.LANGUAGE_CODE == 'en-gb':
        return formats_en_GB.DATE_INPUT_FORMATS[0]
    elif request.LANGUAGE_CODE == 'en':        
        return formats_en.DATE_INPUT_FORMATS[0]
4

2 に答える 2

9

コメントからあなたの質問まで、私はあなたがあなたのコードに実際に持っているものは次のようなものだと推測しています:

from datetime import datetime as dt 

last_contacted = "19/01/2013"
current_tz = timezone.get_current_timezone()
model_instance.date_time = dt.strptime(last_contacted, get_current_date_input_format(request))
model_instance.date_time = current_tz.localize(date_time)

ここmodel_instanceで、は。という名前のDateTimeFieldを持つモデルのインスタンスですdate_time

class MyModel(models.Model)
    ....
    date_time = DateTimeField()

Python関数は、割り当てようとしているdatetime.strptimeナイーブオブジェクトを返します。これは、タイムゾーンサポートが有効になっている場合、非ナイーブオブジェクトの使用が正しくないため、警告を生成します。datetimeDateTimeFielddatetime

strptime1行への呼び出しと1行での呼び出しを組み合わせると、に割り当てる前にナイーブから非ナイーブへlocalizeの変換の完全な計算が実行されるため、この場合はエラーが発生しません。datetimedatetimedate_time

追記:get_current_date_input_format関数は、リクエストにタイムゾーンがない場合に使用するデフォルトのタイムゾーンを返す必要があります。そうでない場合、strptime呼び出しは失敗します。

于 2013-01-29T12:45:44.350 に答える
0

設定ファイルでUSE_TZをオンにしましたか?

USE_TZ = True

また、ドキュメントから、実行できるより具体的な手順がいくつかあります。

于 2013-01-21T22:48:43.833 に答える