Получение реального времени

Получение реального времени

В 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

results for ""

    No results matching ""