Chebuya 415 Опубликовано: 16 ноября, 2019 (изменено) Всем иногда приходится получать реальное время в 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. Но надеюсь кому-то поможет. Изменено 16 ноября, 2019 пользователем BrightYC 5 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 16 ноября, 2019 5 минут назад, BrightYC сказал: Этот код будет работать на любом компьютере, правда нужно учесть, что с OpenOS может выбраться случайная файловая система. Насколько я понимаю, дело не в наличии OpenOS, а в наличии других носителей с файловыми системами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya Автор темы 415 Опубликовано: 16 ноября, 2019 5 минут назад, eu_tomat сказал: Насколько я понимаю, дело не в наличии OpenOS, а в наличии других носителей с файловыми системами. Добавил проверку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 16 ноября, 2019 1 час назад, BrightYC сказал: Добавил проверку. Метка "tmpfs" не обязательно указывает на временную файловую систему. Верное решение: local tmpfs = component.proxy(computer.tmpAddress()) 4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg 197 Опубликовано: 7 февраля, 2020 В 16.11.2019 в 22:06, BrightYC сказал: local f = io.open("/tmp/time", "w") f:write("time") f:close() В кукбуке нет записи строки, файл остается пустым. Видимо, это лишняя операция, без нее быстрее будет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах