В OpenComputers прямого способа получения реального времени нет, поэтому
приходится обходиться окольными путями. Так, функция filesystem.lastModified
возвращает время хоста, а не игровое. Поэтому её можно использовать для
осуществления задачи.
filesystem.lastModified
возвращает, сколько миллисекунд прошло с 1 января
1970. Если мы поделим на 1000, то получим Unix timestamp, а с ним может
работать os.date
.
local fs = require("filesystem")
local function getRealTime()
local name = os.tmpname()
local f = io.open(name, "w")
f:close()
local time = math.floor(fs.lastModified(name) / 1000)
fs.remove(name)
return os.date("%Y-%m-%d %H:%M:%S", time)
end
Следует помнить, что fs.lastModified
возвращает время в часовом поясе хоста,
поэтому может потребоваться корректировка. Если на хосте UTC+3, а требуется UTC,
то перед return
следует дописать следующее:
time = time - 3 * 3600
Отмечу, что время получить можно и в биосе: OpenOS необязателен. Код будет выглядеть так:
local fs = component.proxy(computer.tmpAddress())
local function getRealTime()
local name = "time"
local f = fs.open(name, "w")
fs.close(f)
local time = math.floor(fs.lastModified(name) / 1000)
fs.remove(name)
return os.date("%Y-%m-%d %H:%M:%S", time)
end