2017-09-20 13 views
1

タイムスタンプと現在のタイムゾーンをキャプチャし、それをファイル(JSONまたはYAMLで作成しますが、それは実際には私の質問ではありません)にして、後で別のコンピュータで取得する必要があります。dateutil.tz.tzlocalオブジェクトをシリアル化する方法は?

タイムスタンプは簡単です。time.time()を使用します。

現在のタイムゾーンを取得するには、another SO questionと表示されています。dateutil.tz.tzlocal を使用して現在のタイムゾーンを取得することが適切と思われます。

今、私はそれをシリアル化する方法を理解する必要があります。名前は簡単ですが、それは単なる文字列ですが、オフセットは奇妙なようです。

import time 
import datetime 
import dateutil 

now = datetime.datetime.utcfromtimestamp(time.time()) 
tzlocal = dateutil.tz.tzlocal() 
print tzlocal.tzname(now) 
print tzlocal.utcoffset(now) 

が、これは

US Mountain Standard Time 
-1 day, 17:00:00 

を印刷し、のutcoffset結果は、オブジェクトのように見える:私はちょうど数を期待していました。どうすれば番号を取得できますか?

答えて

1

datetime.timedeltaを返し、私はちょうどtotal_seconds()を呼び出すことができますtzlocal.utcoffset(now)ああ、決して心、:

import time 
import datetime 
import dateutil 
import json 

now = datetime.datetime.utcfromtimestamp(time.time()) 
tzlocal = dateutil.tz.tzlocal() 
info_str = json.dumps(dict(name=tzlocal.tzname(now), 
         offset=tzlocal.utcoffset(now).total_seconds())) 
print info_str 

(私のPC上)プリント

{"name": "US Mountain Standard Time", "offset": -25200.0} 
1

私はあなたのアプリケーションが何であるかわからないんだけどデフォルトでは、ISO 8601タイムスタンプとタイムゾーンオフセットをシリアル化することをお勧めします。最初のUTCに変換してください...シリアル化されたデータを閲覧する人にとっては、頭の中で数学の日付を計算する必要がないため、これは簡単です。

数値のタイムスタンプを貼るのはパフォーマンス上の理由があるかもしれませんが、ISOタイムスタンプの人間が読めるボーナスをあきらめる前に、これがアプリケーションのボトルネックであったことを証明したいと思います。

関連する問題