如何获取chrono::DateTime的UTC偏移量?关于local_minus_utc的疑问
关于chrono中FixedOffset::local_minus_utc的疑问解答
你没误解这个方法,只是命名里的“本地时间”容易误导——这里的“本地时间”指的是当前DateTime实例所属时区的本地时间,和你的系统时区完全无关。
方法本质解析
文档描述“返回将UTC时间转换为本地时间所需添加的秒数”,换个更直白的说法:这个值就是该时区在当前时间点相对于UTC的偏移量。比如UTC+8的时区,把UTC时间转成该时区本地时间需要加28800秒,这个数值正好就是你要的UTC偏移量(正数对应东时区,负数对应西时区)。
你的实现是否准确通用?
完全准确且通用:
dt.offset()会获取该DateTime对应的时区偏移信息,不管是固定偏移时区(如FixedOffset)还是带夏令时的动态时区(如chrono_tz中的时区),调用.fix()后都会得到当前时间点该时区实际生效的FixedOffset实例。local_minus_utc()返回的数值,本质就是当前时间点下,目标时区本地时间与UTC时间的差值,完全符合你要获取的“DateTime所属时区的UTC偏移量”需求。你测试中上海时区返回28800秒不受系统UTC-5时区影响,就是因为这个偏移是从DateTime自身的时区信息中提取的,和系统环境无关。
补充:如果觉得函数名别扭,也可以用offset().fix().utc_minus_local()取反,但local_minus_utc()直接返回的就是东时区为正的偏移量,完全满足需求。
内容的提问来源于stack exchange,提问作者ollien
相关产品推荐
相关产品推荐

