How do I automatically get the timezone offset for my local time zone?
本问题已经有最佳答案,请猛点这里访问。
我试图自动获取本地时区偏移但是遇到了麻烦。 我试过了:
1 | print time.timezone/3600 |
这会得到(当前错误的)偏移,因为它不会自动调整夏令时和非夏令时。
我也尝试过:
1 2 | now_utc = pytz.utc.localize(datetime.datetime.now()) now_mst = now_utc.astimezone(pytz.timezone('US/Mountain')) |
这会得到正确的偏移值,但我想自动设置'US / Mountain'部分,所以我不必手动输入任何东西来获得偏移量。
有没有办法获得正确的偏移量,可以自动调整DST&非DST?
我将在不同地理位置的多台服务器上运行此脚本,如果可以,我想自动获取tz偏移量。
您可以使用dateutil模块。 要立即获取当地时区:
1 2 3 4 5 | >>> import dateutil.tz >>> import datetime >>> localtz = dateutil.tz.tzlocal() >>> localtz.tzname(datetime.datetime.now(localtz)) 'EDT' |
我目前正在东部夏令时间。 在夏令时切换回来之后,您可以看到它将来会改回EST:
1 2 3 | >>> localtz.tzname(datetime.datetime.now(localtz) + datetime.timedelta(weeks=20)) 'EST' |
如果您想要UTC的偏移量,可以使用utcoffset函数。 它返回timedelta:
1 2 | >>> localtz.utcoffset(datetime.datetime.now(localtz)) datetime.timedelta(-1, 72000) |
在这种情况下,因为我是UTC-4,它返回-1天+20小时。 如果您需要,可以将其转换为小时数:
1 2 3 | >>> localoffset = localtz.utcoffset(datetime.datetime.now(localtz)) >>> localoffset.total_seconds() / 3600 -4.0 |