Перейти к содержимому
Chebuya

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

Рекомендуемые сообщения

Всем иногда приходится получать реальное время в OC. Обычно я использую такой код:

local fs = require("filesystem")

local function getTime()
	local f = io.open("/tmp/time", "w")
	f:write("time")
	f:close() 
	
	local timestamp = fs.lastModified("/tmp/time") / 1000 + 3600 * 3 --Умножаем на часовой пояс, в моём случае GMT +3
	return os.date("%d.%m.%Y %H:%M:%S", timestamp) --Реальное время в формате День.Месяц.Год Час:Минута:Секунда
end

print(getTime)

Тут всё просто и понятно. Открываем файл в (Это важно!) /tmpfs, записываем любое значение, и получаем метку времени последнего изменения файла. Про этот способ, наверное, уже все знают, и тем не менее.

 

И тут недавно меня осенило. Я всегда знал, что эта файловая система есть и на голых компьютерах без ЖД, дронах.

Но если /tmpfs есть даже у микроконтроллеров, зачем тянуть время с интернета? Предлагаю вот такой код:

local filesystem = component.proxy(computer.tmpAddress())

local function getTime()
	local handle = filesystem.open("/time", "w")
	filesystem.write(handle, "time")
	filesystem.close(handle)

	local timestamp = filesystem.lastModified("/time") / 1000 + 3600 * 3 
	return os.date("%d.%m.%Y %H:%M:%S", timestamp)
end

Этот код будет работать на любом компьютере. Вывод - тянуть время с интернета не нужно - например так сделано у @Asior в теме с бинарными часами:

Скрытый текст

 

Всё гениальное - просто. @Fingercomp предлагаю добавить этот код сюда https://fingercomp.gitbooks.io/oc-cookbook/content/lua/real-time.html

Возможно, это я такой идиот, а все остальные использовали /tmpfs. Но надеюсь кому-то поможет.

 

Изменено пользователем BrightYC

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
5 минут назад, BrightYC сказал:

Этот код будет работать на любом компьютере, правда нужно учесть, что с OpenOS может выбраться случайная файловая система.

Насколько я понимаю, дело не в наличии OpenOS, а в наличии других носителей с файловыми системами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
5 минут назад, eu_tomat сказал:

Насколько я понимаю, дело не в наличии OpenOS, а в наличии других носителей с файловыми системами.

Добавил проверку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, BrightYC сказал:

Добавил проверку.

Метка "tmpfs" не обязательно указывает на временную файловую систему.

 

Верное решение:

local tmpfs = component.proxy(computer.tmpAddress())

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 16.11.2019 в 22:06, BrightYC сказал:

local f = io.open("/tmp/time", "w") f:write("time") f:close()

В кукбуке нет записи строки, файл остается пустым. Видимо, это лишняя операция, без нее быстрее будет

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...