質問

ただクリアするために、これは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つの問題があります:

  1. "US/Pacific"などの固定されていないUTCオフセットをtzinfoパラメータとして直接渡すべきではありません。代わりにpytz.timezone("US/Pacific").localize()メソッドを使用してください
  2. .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()関数を参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top