2

Pythonがどのように時間を計算しているのかわかりません。私には矛盾しているようです。

私のサーバー時間は次のとおりです。

admin@httstools ~ $ date
Fri Dec 21 17:00:51 PST 2018

Python インタープリターでは、期待される結果 (つまり、2018-12-21) が得られます。

admin@httstools ~ $ python
Python 2.7.5 (default, Nov  6 2016, 00:28:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> import datetime
>>> str(datetime.date.today())
'2018-12-21'
>>>

しかし、タイムゾーンをいじると、おかしなことになります:

>>> time.tzname[time.localtime().tm_isdst]
'PST'

PST が正しいタイムゾーンです。しかし、環境をその TZ に設定してから前のコマンドを再度実行すると、別の日付が取得されます。これは明らかに正しくありません。

>>> os.environ['TZ'] = time.tzname[time.localtime().tm_isdst]
>>> str(datetime.date.today())
'2018-12-22'
>>>

予想される結果は、TZ 変数が「PST」に設定された 2018 年 12 月 21 日です。

フォローアップとして、自分の場所に基づいて常に正しい日付/時刻を返す Python で実行できるコマンドはどれですか。

4

1 に答える 1

2

何が起こっているかについての私の推測は次のとおりです (現時点でテストする Linux システムはありません)。

TZ 環境変数を調べると、実際には「PST」ではなく「America/Pacific」という構文であることがわかります (PST は単に印刷目的で使用される省略形です)。無効な値が TZ 環境変数を介して渡されると、Python は正常なデフォルトとして UTC にフォールバックすると思います。

太平洋標準時午後 5 時の UTC 時間はたまたま翌日の午前 0 時であるため、別の日付が表示されます。

于 2018-12-22T01:45:21.117 に答える