私は現在、素朴なPythonのdatetimesを返すカレンダーシステムのバックエンドに取り組んでいます。フロントエンドの仕組みはさまざまなカレンダーイベントを作成し、フロントエンドは作成したイベントの素朴なバージョンを返します(たとえば、ユーザーが午後3時から4時まで1020年10月5日を選択した場合、フロントエンドは開始日としてdatetime.datetime(2020,10,5,15,0,0)、終了日としてdatetime.datetime(2011,10,5,16,0,0)です。Pythonで単純な日時をDST対応日時に変換するにはどうすればよいですか?
私がする必要があるのは、単純なdatetimeをデータベースに格納するためにUTCに変換するシステムの各ユーザーは既にタイムゾーンの設定を指定しているので、naive datetimeはタイムゾーンの設定と同じタイムゾーンであると見なされます。ユーザーがタイムゾーンを変更すると、既存のイベントはスケジュールされた正しい時刻にレンダリングされます。
フロントエンドは私のコントロールの外にあるので、私が受け取っているデータを変更することはできません。データベース設計も私のコントロール外にあるので、どのデータがどのように格納されているのかを変更することはできません。
import pytz
def convert_to_UTC(naive_datetime, user_tz_preference):
user_datetime = naive_datetime.replace(tzinfo=user_tz_preference)
utc_datetime = user_datetime.astimezone(pytz.utc)
私は夏時間に関連しているに走った問題:ここで
は、私がこれまでに撮影したおおよそのアプローチである「置き換え」を使用していることを が>>> from datetime import datetime
>>> import pytz
>>> user_tz_preference = pytz.timezone('US/Pacific')
>>> naive_datetime = datetime(2011, 10, 26, 12, 0, 0)
>>> user_datetime = naive_datetime.replace(tzinfo=user_tz_preference)
>>> user_datetime
datetime.datetime(2011, 10, 26, 12, 0, tzinfo=<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD>)
>>> received_utc = user_datetime.astimezone(pytz.utc)
>>> received_utc
datetime.datetime(2011, 10, 26, 20, 0, tzinfo=<UTC>)
>>> expected_utc = datetime(2011, 10, 26, 19, 0, tzinfo=pytz.utc)
>>> expected_utc == received_utc
False
お知らせタイムゾーンを設定し、日付にかかわらずPDTの代わりにPSTに変更すると、予想される7時間のDSTオフセットではなく8時間のUTCオフセットが与えられ、時間が正しく保存されなくなります。
naive datetimeを正しいPDT(または他のタイムゾーン相対DST)tzinfoに変換するためのオプションは何ですか?
(また、DSTを監視する時間帯にすべてのユーザーが住んでいるわけではなく、異なる時間に切り替わるタイムゾーンに住んでいるわけではないことに注意してください。タイムゾーンがDSTをサポートしているかどうか、またその日付が切り替わるかどうかを知る必要があります)。
http://www.enricozini.org/2009/debian/using-python-datetime/の –
可能重複[気づかない日時のタイムゾーンの作り方pythonで認識して](http://stackoverflow.com/questions/7065164/how-to-make-an-unaware-datetime-timezone-aware-in-python) – Pureferret