为何Lua中UTC时间经os.date->os.time->os.date往返后差1小时?
Lua UTC时间往返转换偏移问题解析
问题出在第二次调用os.date时没有指定UTC模式,导致输出的是本地时区时间,而非UTC时间。
代码逻辑拆解:
- 第一行
os.date("!%a %b %d %H:%M:%S %Y"):通过!前缀强制使用UTC时区,输出当前UTC时间,这是正确的。 os.date("!*t", os.time()):获取当前UTC时间戳对应的UTC时间字段表(包含年、月、日、时等信息)。os.time(...):将UTC时间表转换回UTC标准的时间戳(该结果与原os.time()输出一致)。- 第二行
os.date("%c", ...):未加!前缀,默认使用本地时区解析时间戳,因此输出的是该UTC时间戳对应的本地时间,和第一行的UTC时间差了本地时区的偏移量(你的例子中为+1小时)。
修正方案:
在第二次调用os.date时添加!前缀,强制使用UTC时区解析时间戳,即可得到与原UTC时间一致的结果:
print(os.date( "!%a %b %d %H:%M:%S %Y")) print(os.date("!%c" , os.time( os.date("!*t", os.time() ) ) ))
额外说明:若要验证时间与时间戳的往返转换正确性,需全程保持时区一致(要么统一用UTC,要么统一用本地时区),避免时区切换引发的时间偏移。
内容的提问来源于stack exchange,提问作者MandoMando
相关产品推荐
相关产品推荐

