我想捕获一个时间戳和当前时区,并将其序列化为一个文件(在JSON或YAML中,但这不是我的问题),以便以后在另一台计算机上进行检索。
时间戳很简单,我只会使用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的结果似乎是一个对象。我如何得到这个号码?
答案 0 :(得分:1)
哦,没关系,tzlocal.utcoffset(now)
会返回datetime.timedelta
,我可以致电total_seconds()
:
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
打印(在我的电脑上)
{"name": "US Mountain Standard Time", "offset": -25200.0}
答案 1 :(得分:1)
我不确定您的应用程序是什么,但作为默认设置,我建议使用时区偏移量序列化为ISO 8601时间戳。更好的是,首先转换为UTC ...这使得碰巧浏览序列化数据的人更容易,因为他们不必在头脑中进行日期数学计算。
可能存在坚持使用数字时间戳的性能原因,但在放弃人类可读的ISO时间戳奖励之前,我想要证明这是我的应用程序的瓶颈。