-1

以下のコードが UNIX エポック タイムスタンプ (タイムゾーン UTC+1) の 1 時間を減算する理由がわかりません。

import datetime
import pytz
start_dt = datetime.datetime.fromtimestamp( 1362268800 , pytz.utc )
print start_dt
# prints datetime.datetime(2013, 3, 3, 0, 0, tzinfo=<UTC>)
print int( start_dt.strftime("%s") )
# prints: 1362265200 (which is 2013-03-02T23:00Z ) <--- I expected 1362268800
print start_dt.strftime("%Y-%m-%dT%H:%M:%SZ")
# prints: 2013-03-03T00:00:00Z

それ以来、を使用して問題を回避しましcalendar.timegm( start_ts.timetuple() )たが、上記のコードの何が問題なのか、UTC で strftime がエポック タイムスタンプを出力する場所にある datetime オブジェクトを作成する方法を根本的に疑問に思います。

Python ドキュメントによると、「%s」の使用は特に許可されていません。結果が混乱する場合、明示的に許可しない (つまり、例外を発生させる) べきですか?

Python 2.7.3 の使用

4

1 に答える 1

1

Python ドキュメントによると、「%s」の使用は特に許可されていません。結果が混乱する場合、明示的に許可しない (つまり、例外を発生させる) べきですか?

ドキュメントから:

Python はプラットフォーム C ライブラリの strftime() 関数を呼び出すため、サポートされる形式コードの完全なセットはプラットフォームによって異なり、プラットフォームのバリエーションは一般的です。

の明示的なサポートを追加するために、Python バグ トラッカー「datetime.strftime('%s') は tzinfo を尊重する必要"%s"があります」に未解決の問題があります。

> 問題は strftime() にあるようです

はい、strftime('%s') は現時点で tzinfo を無視します。これはバグではありません。'%s' 形式のコードのサポートは付随的なものであり、Python では文書化されていません。

于 2013-03-13T09:51:28.910 に答える