0

動作するコードがあります。私の質問は、なぜこれが機能するのかということです。

#"04/13/05 2:30pm EDT" <- original date string
from datetime import datetime, timedelta
from pytz import timezone
import pytz
import time

T= time.struct_time((2005,4,13,14,30,0,0,0,1))
t = time.mktime(T)

print(t)

このプリント

1113417000, 

オンラインコンバーターによると、http://www.epochconverter.com/は、

Your time zone: 4/13/2005 2:30:00 PM GMT-4

どちらが正しい。私の質問は、GMT-4であるEDTの時刻をどのようにして知るのかということです。9タプルの最後は「dstフラグ」ですが、DSTが使用されるタイムゾーンは多数あります。では、どのようにして正しいタイムゾーンを検出するのでしょうか。

4

2 に答える 2

2

stdlib C時間関数を使用して、オペレーティングシステムにその情報を要求します。

timeモジュールのドキュメントを引用するには:

このモジュールで定義されている関数のほとんどは、同じ名前のプラットフォームCライブラリ関数を呼び出します。これらの関数のセマンティクスはプラットフォームによって異なるため、プラットフォームのドキュメントを参照すると役立つ場合があります。

DSTフラグに-1を渡すと、ライブラリにフラグを設定させることができます。を参照してくださいtime.struct_time。ヨーロッパ/オスロのタイムゾーン用に構成されたMacOSX 10.7.5のセットアップでは、次のようになります。

>>> import time
>>> time.mktime((2005,4,13,14,30,0,0,0,-1))
1113395400.0

または、epochconverterによって「翻訳された」ように:

Your time zone: 4/13/2005 2:30:00 PM GMT+2
于 2013-01-22T20:49:59.907 に答える
1

ドキュメントによると、関数time.mktime(t)は、UTCではなく現地時間で表される引数(struct_time)を取ります。現地時間はオペレーティングシステムから取得されます。たとえば、 time.tznameを使用して、ローカルDSTタイムゾーンを確認できます。

于 2016-12-28T12:11:10.733 に答える