You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 14:30:55