Swatch Internet time in python
我有这个代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | from time import localtime, timezone def itime(): """Calculate and return Swatch Internet Time :returns: No. of beats (Swatch Internet Time) :rtype: float """ h, m, s = localtime()[3:6] beats = ((h * 3600) + (m * 60) + s + timezone) / 86.4 if beats > 1000: beats -= 1000 elif beats < 0: beats += 1000 return beats |
但它没有考虑时区。
如何选择苏黎世作为时区?
服务器在美国,但互联网时间以瑞士为基础
Swatch Internet时间中没有时区,而是使用了新的BIEL同时时间尺度(BMT),该时间尺度基于Swatch在瑞士BIEL的总部,相当于中欧时间、西非时间和UTC+01。参考https://en.wikipedia.org/wiki/swatch_internet_time
但您可以通过以下步骤来实现这一点:
1)-以UTC格式获取当前时间。(现在您不必担心服务器的位置和时间)
2)-将该时间转换为苏黎世时间(苏黎世时间为UTC+2)。
3)-将苏黎世时间转换为
此前,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | from datetime import datetime from dateutil import tz def itime(): """Calculate and return Swatch Internet Time :returns: No. of beats (Swatch Internet Time) :rtype: float """ from_zone = tz.gettz('UTC') to_zone = tz.gettz('Europe/Zurich') time = datetime.utcnow() utc_time = time.replace(tzinfo=from_zone) zurich_time = utc_time.astimezone(to_zone) h, m, s = zurich_time.timetuple()[3:6] beats = ((h * 3600) + (m * 60) + s) / 86.4 if beats > 1000: beats -= 1000 elif beats < 0: beats += 1000 return beats print itime() |
希望这有帮助:)