如何将时区小时偏移量转为整数?解决int与set运算报错问题
解决时区偏移量集合类型无法参与数值运算的问题
你的问题根源在于错误地将hour_offset定义成了集合(set)类型——因为你用了大括号{(utcoff1-utcoff0).total_seconds()/3600},在Python中,单个元素被大括号包裹会被解析为集合,而非普通数值,这就导致后续无法和整数做加法运算。
修复步骤
- 移除多余大括号:直接计算偏移量数值,不要用大括号包裹
- 转换为整数类型:使用
int()将浮点数偏移量转为整数,满足后续数值运算需求
修复后的完整代码
from datetime import datetime from zoneinfo import ZoneInfo dt = datetime.now() tz0, tz1 = "America/Los_Angeles", "Europe/London" utcoff0, utcoff1 = dt.astimezone(ZoneInfo(tz0)).utcoffset(), dt.astimezone(ZoneInfo(tz1)).utcoffset() print(f"hours offset between {tz0} -> {tz1} timezones: {(utcoff1-utcoff0).total_seconds()/3600}") # 移除大括号并转为整数 hour_offset = int((utcoff1-utcoff0).total_seconds()/3600) print(type(hour_offset)) print(hour_offset) # 现在可以正常执行数值运算 print(1 + hour_offset)
关键说明
- 大括号
{}在Python中用于创建集合或字典,若要包裹表达式,只需用小括号()即可(甚至这里小括号都可以省略) (utcoff1-utcoff0).total_seconds()/3600得到的是浮点数类型的小时偏移量,用int()转换后会直接截断小数部分(比如8.0转成8,若遇到8.9也会转成8);如果需要四舍五入,可以改用round()函数
内容的提问来源于stack exchange,提问作者TriggerThumb
相关产品推荐
相关产品推荐

