web-dev-qa-db-ja.com

PythonでコンピューターのUTCオフセットを取得する

Pythonでは、コンピューターが設定されているUTC時間オフセットをどのように見つけるのですか?

43
Paul

gmtime()はUTC時間を返し、localtime()はローカル時間を返すため、2を引くとutcオフセットが得られます。

29
jts

time.timezone

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年のヨーロッパ/モスクワのタイムゾーン)。

77
jfs

好き:

>>> strftime('%z')
'-0700'

最初にJTSの答えを試しましたが、間違った結果になりました。私は今-0700にいますが、-0800にいると言っていました。しかし、減算できるものを得る前に変換を行わなければならなかったため、答えは間違っているよりも不完全だったのかもしれません。

3
dstromberg
hours_delta = (time.mktime(time.localtime()) - time.mktime(time.gmtime())) / 60 / 60
1
Tilek

UTC修正タイムゾーンでUnixタイムスタンプを作成します

この単純な関数により、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
0
Stephen Blum