Как получить текущий часовой пояс системы с помощью Lua - PullRequest
1 голос
/ 25 марта 2019

Как получить часовой пояс текущей системы с помощью Lua. (США / Гора). Я работаю над Linux OS. Мне нужно знать, как получить систему Linux, например (США / Гора, Азия / Мумбаи). как написать код для этого

Ответы [ 2 ]

2 голосов
/ 25 марта 2019

Вы можете использовать пакет luarocks luatz:

$ luarocks install 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 голос
/ 25 марта 2019

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-пользователи: часовой пояс

...