56

日付があり、タイムゾーンを認識させる必要があります。

local_tz = timezone('Asia/Tokyo')
start_date = '2012-09-27'
start_date = datetime.strptime(start_date, "%Y-%m-%d")   
start_date = start_date.astimezone(local_tz)


now_utc = datetime.now(timezone('UTC'))
local_now = now_utc.astimezone(local_tz)

私はこれが本当かどうかを見つける必要があります:

print start_date>local_now

しかし、このエラーが発生します。

   start_date = start_date.astimezone(local_tz)
   ValueError: astimezone() cannot be applied to a naive datetime

UTCを東京に問題なく変換します。東京でstart_dateタイムゾーン対応の広告を作成する必要があります。

ありがとう

4

3 に答える 3

58

pytzタイムゾーンの場合は、そのメソッドを使用して、.localize()ナイーブなdatetimeオブジェクトをタイムゾーンを持つオブジェクトに変換します。

start_date = local_tz.localize(start_date)

DST遷移のないタイムゾーンの場合、タイムゾーンをナイーブオブジェクトにアタッチする.replace()メソッドも通常は機能するはずです。datetime

start_date = start_date.replace(tzinfo=local_tz)

詳細については、pytzドキュメントのローカライズされた時刻と日付の計算を参照してください。

于 2012-09-27T16:37:38.633 に答える
16

local_tz.localize(naive_dt, is_dst=None)単純な日時オブジェクトをタイムゾーン対応のオブジェクトに変換するために使用できます。

from datetime import datetime
import pytz

local_tz = pytz.timezone('Asia/Tokyo')

start_date = local_tz.localize(datetime(2012, 9, 27), is_dst=None)
now_utc = datetime.utcnow().replace(tzinfo=pytz.utc)

print start_date > now_utc

is_dst=None与えられた現地時間があいまいな場合、.localize()に例外を発生させるように強制します。

于 2012-10-03T16:51:54.757 に答える
1

Django Rest Frameworkを使用している場合は、次のようにDateTimeFieldクラスをオーバーライドできます。

class DateTimeFieldOverridden(serializers.DateTimeField):

def to_representation(self, value):
    local_tz = pytz.timezone(TIME_ZONE)
    value = local_tz.localize(value)
    return super(DateTimeFieldOverridden, self).to_representation(value)

そして、シリアライザーで次のように使用します。

date_time = DateTimeFieldOverridden(format='%d-%b-%Y', read_only=True)

これが誰かを助けることを願っています。

于 2018-06-19T10:11:15.597 に答える