时区 |
|
+hhmm
或 -hhmm
。不能使用 os.date("%z")
,因为其返回值的格式不可移植;特别是,Windows 系统不使用 strftime()
的 C99 语义。以下代码应以可移植的方式为当前本地时间生成一个时区字符串。
注意:以下代码只计算“现在”的时区偏移量,这与 os.date("%z")
不同,后者可以处理过去或将来的时间,并考虑夏令时。或者,您可以使用下面的 get_timezone_anystamp(ts)
-- Compute the difference in seconds between local time and UTC. local function get_timezone() local now = os.time() return os.difftime(now, os.time(os.date("!*t", now))) end timezone = get_timezone() -- Return a timezone string in ISO 8601:2000 standard form (+hhmm or -hhmm) local function get_tzoffset(timezone) local h, m = math.modf(timezone / 3600) return string.format("%+.4d", 100 * h + 60 * m) end tzoffset = get_tzoffset(timezone) --[[ debugging for _, tz in ipairs(arg) do if tz == '-' then tz = timezone else tz = 0 + tz end print(tz, get_tzoffset(tz)) end --]] -- return the timezone offset in seconds, as it was on the time given by ts -- Eric Feliksik local function get_timezone_offset(ts) local utcdate = os.date("!*t", ts) local localdate = os.date("*t", ts) localdate.isdst = false -- this is the trick return os.difftime(os.time(localdate), os.time(utcdate)) end