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

如何使用Lua获取系统时区偏移量(例如UTC+05:30格式)

Lua获取系统时区偏移(UTC±HH:MM格式)并存储到变量的实现方案

以下方案按通用性从高到低排序,可根据运行环境选择:

1. 纯Lua内置函数实现(全平台优先推荐)

依赖Lua标准库os和string模块,无需调用外部命令,兼容所有支持标准strftime格式符的环境:

-- 直接通过os.date获取带正负号的4位时区偏移原始值
local raw_offset = os.date("%z")
-- 格式化转换为UTC±HH:MM格式
local timezone_offset = string.format("UTC%s:%s", raw_offset:sub(1, 3), raw_offset:sub(4, 5))
-- 输出示例:UTC+05:30

2. 全平台兜底自定义计算方案(无任何外部依赖)

如果部分旧系统不支持%z格式符,可通过计算本地时间与UTC时间的差值手动生成结果,兼容所有Lua 5.1+版本:

-- 分别获取当前UTC时间戳和本地时间戳
local utc_time = os.time(os.date("!*t"))
local local_time = os.time(os.date("*t"))
local offset_sec = local_time - utc_time

-- 转换为时分格式
local sign = offset_sec >= 0 and "+" or "-"
offset_sec = math.abs(offset_sec)
local h = math.floor(offset_sec / 3600)
local m = math.floor((offset_sec % 3600) / 60)
local timezone_offset = string.format("UTC%s%02d:%02d", sign, h, m)

3. Windows环境调用PowerShell实现

如果需要完全对齐Windows系统层面的时区设置,可调用PowerShell命令获取:

-- 执行PowerShell命令获取时区偏移
local ps_cmd = 'powershell -Command "(Get-TimeZone).BaseUtcOffset.ToString()" '
local handle = io.popen(ps_cmd)
local raw_offset = handle:read("*a"):gsub("^%s*(.-)%s*$", "%1") -- 去除首尾空白字符
handle:close()

-- 格式化转换为目标格式
local sign = raw_offset:sub(1,1) == "-" and "-" or "+"
local h, m = raw_offset:match("(%d+):(%d+)")
local timezone_offset = string.format("UTC%s%02d:%02d", sign, tonumber(h), tonumber(m))

4. Linux/macOS环境调用系统date命令实现

类Unix系统下可直接调用date命令获取结果:

local handle = io.popen("date +%z")
local raw_offset = handle:read("*a"):gsub("%s+", "")
handle:close()
local timezone_offset = string.format("UTC%s:%s", raw_offset:sub(1, 3), raw_offset:sub(4, 5))

内容的提问来源于stack exchange,提问作者Vivek Raja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:48:01