You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
807 B
Lua
36 lines
807 B
Lua
local read_tzfile = require"luatz.tzfile".read_tzfile
|
|
|
|
local base_zoneinfo_path = "/usr/share/zoneinfo/"
|
|
local local_zoneinfo_path = "/etc/localtime"
|
|
local tz_cache = {}
|
|
|
|
local function name_to_zoneinfo_path(name)
|
|
if name == nil then
|
|
return local_zoneinfo_path
|
|
elseif name:sub(1, 1) == "/" then
|
|
return name
|
|
else
|
|
return base_zoneinfo_path .. name
|
|
end
|
|
end
|
|
|
|
local function clear_tz_cache(name)
|
|
tz_cache[name_to_zoneinfo_path(name)] = nil
|
|
end
|
|
|
|
local function get_tz(name)
|
|
local path = name_to_zoneinfo_path(name)
|
|
-- TODO: stat path
|
|
local tzinfo = tz_cache[path]
|
|
if tzinfo == nil then
|
|
tzinfo = read_tzfile(path)
|
|
tz_cache[path] = tzinfo
|
|
end
|
|
return tzinfo
|
|
end
|
|
|
|
return {
|
|
get_tz = get_tz,
|
|
clear_tz_cache = clear_tz_cache,
|
|
}
|