Pythonでは、コンピューターが設定されているUTC時間オフセットをどのように見つけるのですか?
gmtime()
はUTC時間を返し、localtime()
はローカル時間を返すため、2を引くとutcオフセットが得られます。
import time
print -time.timezone
UTCオフセットを秒単位で出力します(夏時間(DST)を考慮するには、 time.altzone を参照してください)。
is_dst = time.daylight and time.localtime().tm_isdst > 0
utc_offset = - (time.altzone if is_dst else time.timezone)
ここで、utcオフセットは「ローカル時間を取得するには、utc時間にutcオフセットを追加します」で定義されます。
Python 3.3+があります tm_gmtoff
属性 基礎となるCライブラリがサポートしている場合:
utc_offset = time.localtime().tm_gmtoff
注:time.daylight
は、 一部のEdgeの場合 で誤った結果を返す場合があります。
tm_gmtoff
は、Python 3.3+:
from datetime import datetime, timedelta, timezone
d = datetime.now(timezone.utc).astimezone()
utc_offset = d.utcoffset() // timedelta(seconds=1)
time.daylight
の問題を回避し、tm_gmtoff
が使用できない場合でも機能する方法で現在のUTCオフセットを取得するには、 @ jtsの提案 でローカル時間とUTC時間利用される:
import time
from datetime import datetime
ts = time.time()
utc_offset = (datetime.fromtimestamp(ts) -
datetime.utcfromtimestamp(ts)).total_seconds()
過去/将来の日付のUTCオフセットを取得するには、pytz
タイムゾーンを使用できます。
from datetime import datetime
from tzlocal import get_localzone # $ pip install tzlocal
tz = get_localzone() # local timezone
d = datetime.now(tz) # or some other local date
utc_offset = d.utcoffset().total_seconds()
DSTの移行中に機能します。ローカルタイムゾーンがその時点で異なるUTCオフセットを持っていた場合でも、過去/将来の日付で機能します(例:2010-2015年のヨーロッパ/モスクワのタイムゾーン)。
好き:
>>> strftime('%z')
'-0700'
最初にJTSの答えを試しましたが、間違った結果になりました。私は今-0700にいますが、-0800にいると言っていました。しかし、減算できるものを得る前に変換を行わなければならなかったため、答えは間違っているよりも不完全だったのかもしれません。
hours_delta = (time.mktime(time.localtime()) - time.mktime(time.gmtime())) / 60 / 60
この単純な関数により、MySQL/PostgreSQLデータベースdate
オブジェクトから現在の時刻を簡単に取得できます。
def timestamp(date='2018-05-01'):
return int(time.mktime(
datetime.datetime.strptime( date, "%Y-%m-%d" ).timetuple()
)) + int(time.strftime('%z')) * 6 * 6
>>> timestamp('2018-05-01')
1525132800
>>> timestamp('2018-06-01')
1527811200