どちらの日時オブジェクトも「ナイーブ」です。つまり、DSTを認識していません。datetime.now()
マシンが実行されている現在の時刻を返します。これにはDSTが含まれる場合があります。同じことが当てはまりますdatetime.fromtimestamp(os.path.getmtime())
。
#1-日時オブジェクトのローカライズはオプションになる可能性があります。何かのようなもの
from datetime import datetime
import tzlocal
now_aware = tzlocal.get_localzone().localize(datetime.now())
file_mtime = datetime.fromtimestamp(os.path.getmtime(file))
# assuming the file was created on a machine in the same timezone (!):
file_mtime_aware = now_aware.tzinfo.localize(file_mtime)
age = now_aware - file_mtime_aware
#2-別のオプション、でUTC変換を使用datetime
:
now = datetime.utcnow()
age = now - datetime.utcfromtimestamp(os.path.getmtime(file_name))
if (age.seconds + age.days * 24 * 3600) < -180:
print(f'WARN: file has timestamp from future?: {age} s')
#3 -としてVPfBが彼の答えで指摘し、os.path.getmtime
UTCタイムスタンプ(チェック返すosモジュールのドキュメントと時間モジュールのドキュメントを)。したがって、最も簡単な解決策はdatetime
、最初にへの変換をスキップし、UTCタイムスタンプのみを使用することです。たとえば、現在のUTCタイムスタンプをとして取得しtime.time()
ます。
タイムゾーンでの作業は怒っあなたを運転...しかし、いくつかの良いリソースは例えば、そこにそこにいることができ、この中のポストは。