时区

lua-users home
wiki

以下函数以可移植的方式返回一个时区字符串,格式为 +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

另请参阅


最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2013 年 1 月 21 日下午 2:18 GMT (差异)