Python - 特定のタイムゾーンでDateTimeを設定する(UTC変換なし)
質問
ただクリアするために、これはPython 2.6で、私はPYTZを使用しています。
これは、米国のタイムゾーンを扱うだけで、私は日付(今日)をアンカーすることができる必要があり、PSTのみ8pmと11pmのUNIXタイムスタンプ(EPOCH TIME)を取得します。
これは私を狂わせる。
> pacific = pytz.timezone("US/Pacific")
> datetime(2011,2,11,20,0,0,0,pacific)
datetime.datetime(2011, 2, 11, 20, 0, tzinfo=<DstTzInfo 'US/Pacific' PST-1 day, 16:00:0 STD>)
> datetime(2011,2,11,20,0,0,0,pacific).strftime("%s")
'1297454400'
zsh> date -d '@1297454400'
Fri Feb 11 12:00:00 PST 2011
.
だから、私はタイムゾーンを設定していても、のDateTime を作成していても、まだそれをUTCとして作成してから変換しています。私が計算をやろうとしているときにUTCが先日になるので、これは問題です。
今日の8pm PSTのタイムスタンプを生成する簡単な(少なくとも精巧な)方法はありますか?
(明確にするために、データベースのタイムスタンプのように、ほとんどの場合はUTCの使用の値を理解しています。これはそれらの状況の1つではありません。私は特にPSTで夕方にタイムスタンプを必要とし、UTCは入る必要はありません。)
解決
UTCタイムゾーンのTZINFOオブジェクトGenerAcoditagCodeを作成してから、これを試してください。
#XXX: WRONG (for any timezone with a non-fixed utc offset), DON'T DO IT
datetime(2011,2,11,20,0,0,0,pacific).astimezone(utc).strftime("%s")
.
編集:コメント内で指摘されているように、TimeZoneをutc
コンストラクタに入れるとは限りません。
他のヒント
少なくとも2つの問題があります:
-
"US/Pacific"
などの固定されていないUTCオフセットをtzinfoパラメータとして直接渡すべきではありません。代わりにpytz.timezone("US/Pacific").localize()
メソッドを使用してください -
.strftime('%s')
はポータブルではありません。 tzinfo を無視し、常にローカルタイムゾーンを使用します。datetime.timestamp()
または代わりに古いPythonバージョンのaコリツ語を使用してください。与えられたタイムゾーンでタイムゾーンを認識したDateTimeを作成するには:
.#!/usr/bin/env python from datetime import datetime import pytz # $ pip install pytz tz = pytz.timezone("US/Pacific") aware = tz.localize(datetime(2011, 2, 11, 20), is_dst=None)
POSIXタイムスタンプを取得する:
.timestamp = (aware - datetime(1970, 1, 1, tzinfo=pytz.utc)).total_seconds()
(
totimestamp()
メソッドをエミュレートする方法についての.total_seconds()
関数を参照してください。
所属していません StackOverflow