2011-01-24 17 views
13
import time 
print time.strftime("%a, %d %b %Y %I:%M %p %Z", time.gmtime()) 

私はカリフォルニアに住んでいます。何らかの理由で、このコードは、システムタイムゾーンを尊重するのではなく、GMTで時刻を報告しています。私はstrftimeが私が太平洋にいることを知っていることを知っています。なぜなら、最後にはまだ「PST」が印刷されているからです。しかし、まだ8時間先です。他に誰かがこれに気付いていますか?私のシステムや私のコードに間違っているものは誰でも知っていますか?Python:strftime、gmtimeがタイムゾーンを尊重しない

編集: コマンドラインでdateを実行すると、私に正しい日付が与えられます。さらに、私はこれを2つの異なるコンピュータ(macとlinux)で実行しており、両方とも8時間前に報告しています。 strftimeを使用する前にタイムゾーンを修正する予定ですか?

+0

コマンドラインで "date"を実行するだけですか?コンピュータの時刻がGMTに設定されていても、カリフォルニアのタイムゾーンが設定されている可能性はありますか? –

答えて

25

time.gmtime()は時刻をUTCで返します。必要なのはtime.localtime()です。は、です(タイムゾーン対応)。この動作は、time module documentationによく記載されています。

EDIT:

struct_timeに任意のtime.time()スタイルのタイムスタンプを変換するには、 time.localtime()に引数を指定することができます。

>>> print time.strftime("%a, %d %b %Y %I:%M:%S %p %Z", time.localtime(10.5)) 
Thu, 01 Jan 1970 02:00:10 AM EET 
+0

time.localtime()は素晴らしいですが、UTCでファイルからタイムスタンプを取得しています。タイムゾーンをUTCからローカルタイムゾーンに変換するにはどうすればよいですか? –

+0

time.localtime()はうまく動作します。ありがとうございました! –

+1

@Shaun:[pytz](http://pytz.sourceforge.net/)が、もっと複雑なタイムゾーン変換に役立つ場合があります。 'time.localtime'には、タイムスタンプがあまり使われていないとき(例えば、夏時間の変更を超えて過去や未来などに)、いくつかの問題があります。 – ephemient

0

UNIXシステム上のタイムゾーンを変更するには、このような何かを実行します。

ln -sf /usr/share/zoneinfo/America/Los_Angeles /etc/localtime 

/usr/share/zoneinfo/を参照してください上記のコマンドを実行したい場合は

+0

コメントはまだありません。 – Landon

関連する問題