如何通过使用Lua获取当前系统时区

时间:2019-03-25 16:39:32

标签: lua lua-table

如何使用Lua获取当前系统的时区。 (美国/山)。我正在Linux操作系统上工作。我需要知道如何获得像(美国/山地,亚洲/孟买)这样的Linux系统。如何为此编写代码

2 个答案:

答案 0 :(得分:2)

您可以使用羽绒包luatz包:

> luatz = require("luatz")
> now = luatz.time()
> new_york = luatz.time_in('America/New_York', now)
> print(luatz.timetable.new_from_timestamp(new_york))
2019-03-25T16:19:43.696
> paris = luatz.time_in('Europe/Paris', now)
> print(luatz.timetable.new_from_timestamp(paris))
2019-03-25T21:19:43.696

然后

> america_new_york = luatz.get_tz('America/New_York')
> for key,val in pairs(america_new_york:find_current(now)) do print(key,val) end
abbrind 4
isstd   false
isdst   true
isgmt   false
gmtoff  -14400
abbr    EDT
> europe_paris = luatz.get_tz('Europe/Paris')
> for key,val in pairs(europe_paris:find_current(now)) do print(key,val) end
abbrind 17
isstd   true
isdst   false
isgmt   true
gmtoff  3600
abbr    CET

该库的功能有限,无法返回有关时区本身的信息:

luatz.get_tz()

要查询当前系统时区,请使用不带参数的> now = luatz.time() > mytz = luatz.get_tz() > mytz_info = mytz:find_current(now) > mytz_info.abbr EDT > mytz_info.gmtoff -14400 > mytz_info.isdst true 。我看不到任何获得奥尔森时区名称的方法,但是您可以获得一些数据

{{1}}

答案 1 :(得分:1)

print( os.date('%m/%d/%y %H:%M:%S %z',t0)) = 03/25/19 10:57:29 Pacific Daylight Time我在美国华盛顿的西雅图。

%z为您提供了时区,这可能足以满足您的需求,但是请注意:

  

一个人不能使用os.date(“%z”),因为其返回值的格式不可移植;特别是Windows系统不将C99语义用于strftime()。 -http://lua-users.org/wiki/TimeZone

或者,您可以执行以下操作来确定偏移量的实际值:

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

资源:lua-users: Time Zone