1

Windows XP を実行している Python アプリケーションで、次のコマンドで現在の時刻を取得します。

import datetime
now = datetime.datetime.now()

また、時刻はシステム クロック表示の時刻と一致します。ただし、アプリケーションがまだ実行されている状態で、Windows の時計に移動し、[タイム ゾーン] を選択して変更します。上記の方法を使用して再び時刻を取得しましたが、今回は正しくありません。タイム ゾーンを変更していないかのように時刻が表示されます。

しかし、アプリケーションを閉じて再起動して時間を取得すると、時計と一致します。アプリケーションが最初にロードされたタイムゾーンに「スタック」しているようです。

興味深いことに、これはタイム ゾーンが変更された場合にのみ発生します。アプリケーションで変更が正しく変更される時間(タイムゾーンではなく)を変更するだけです。

これはなぜですか?また、それを防ぐにはどうすればよいですか?

4

1 に答える 1

1

私の推測では、Python ランタイムは起動時にシステムのタイムゾーンを読み取り、その基準として UTC を使用します。そのため、タイムゾーンを変更しても時刻を変更しない場合、Windows から Python への変更信号はありません。この仮定を実証するために、私はまだpythonドキュメントを掘り下げています。

これが重要な理由はありますか?システムのタイムゾーンが頻繁に変更されることはないと思われます。少なくとも、ユーザーがアプリケーションを単純に再起動できないほど頻繁に変更されることはありません。

たとえそれが正しいとしても、キャッシュされたタイムゾーン値を更新するために Python から実行できる呼び出しがある可能性があります。

ピッツを使っていますか?それともただの日時ですか?

アップデート

これは以前に報告されており、他の質問には合理的な解決策があります。

于 2013-04-02T20:06:21.310 に答える