Перейти к публикации
Форум - ComputerCraft
  • 0
Laine_prikol

API для определения времени в lua

Вопрос

Где можно найти сайт который при отправке запроса вернёт реальное московское время? В формате: часы:минуты

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

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


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

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

  • 0

В интернете.

Где, гуглил там хрень всякая либо без апи, есть 1 но он платный

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


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

Есть вот такая апишка: https://www.amdoren.com/time-zone-api/

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

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


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

Ну да, если не искать, то много не найдешь. Даже на форуме.

  • Like 3

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


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

А чего париться-то, API всякие искать... гуглим что-то наподобие "unix time", выбираем первый попавшийся сайт (к примеру, https://www.unixtimestamp.com/), отсылаем обычный запрос на получение контента веб-страницы, парсим результат через регулярку и наслаждаемся:

-- Получаем содержимое веб-страницы через дефолтную internet-либу
local data = ""
for chunk in require("internet").request("https://www.unixtimestamp.com/") do
  data = data .. chunk
end

-- Извлекаем время и корректируем часовой пояс
local timezone = 3
local timestamp = tonumber(data:match("(%d+)[^%d]+seconds since Jan")) + 3600 * timezone
print(os.date("%c", timestamp))
Изменено пользователем ECS

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


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

 

А чего париться-то, API всякие искать... гуглим что-то наподобие "unix time", выбираем первый попавшийся сайт (к примеру, https://www.unixtimestamp.com/), отсылаем обычный запрос на получение контента веб-страницы, парсим результат через регулярку и наслаждаемся:

-- Получаем содержимое веб-страницы через дефолтную internet-либу
local data = ""
for chunk in require("internet").request("https://www.unixtimestamp.com/") do
  data = data .. chunk
end

-- Извлекаем время и корректируем часовой пояс
local timezone = 3
local timestamp = tonumber(data:match("(%d+)[^%d]+seconds since Jan")) + 3600 * timezone
print(os.date("%c", timestamp))

А если нужно постоянно получать время? Парсинг не подойдёт.

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


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

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

  • Like 1

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


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

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

а там периодически корректировать ошибки не надо при таком раскладе?

или всё норм

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


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

а там периодически корректировать ошибки не надо при таком раскладе? или всё норм

Надо корректировать после каждого рестарта сервера. Как отследить этот момент, не ясно, поэтому надо корректировать периодически. А вот, как часто надо корректировать, зависит от условий задачи. Слишком частые обращения к сервису чреваты баном по IP, а редкие коррекции лишают такие часы смысла. Заходишь такой после рестарта сервера, а часы отстают на минуту-две. Зачем они тогда вообще нужны? Да и вообще, хороший вопрос, зачем наблюдать реальное время именно в Майнкрафте, когда есть более удобные инструменты. Сделать более-менее правдоподобные часики реально, но админ сервера не будет рад использованным методам.

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


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

Надо корректировать после каждого рестарта сервера. Как отследить этот момент, не ясно, поэтому надо корректировать периодически. А вот, как часто надо корректировать, зависит от условий задачи. Слишком частые обращения к сервису чреваты баном по IP, а редкие коррекции лишают такие часы смысла. Заходишь такой после рестарта сервера, а часы отстают на минуту-две. Зачем они тогда вообще нужны? Да и вообще, хороший вопрос, зачем наблюдать реальное время именно в Майнкрафте, когда есть более удобные инструменты. Сделать более-менее правдоподобные часики реально, но админ сервера не будет рад использованным методам.

компуктеркрафт мог бы это отследить, ибо там проги зависят от релода сервака

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


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

компуктеркрафт мог бы это отследить, ибо там проги зависят от релода сервака

Какова ирония! То, что всегда считалось недостатком ComputerCraft, в определённой ситуации стало достоинством.
  • Like 2

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


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

Какова ирония! То, что всегда считалось недостатком ComputerCraft, в определённой ситуации стало достоинством.

 

Ну, у всего на этом свете есть две стороны. =)

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


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

Уже не помню где и как я находил нормальную страницу интернет откуда можно было брать время. Почитай код http://computercraft.ru/topic/1898-binarnye-chasy/ там есть одна из ссылок что возвращает время.

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


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

http://computercraft.ru/topic/688-poluchenie-tochnogo-realnogo-vremeni
а вот этого мало? в крайнем случае, если нет файловой системы(например, какой-нибудь микроконтроллер), можно поставить ПК, который будет тебе это время по беспроводной сети пересылать

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


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

http://computercraft.ru/topic/688-poluchenie-tochnogo-realnogo-vremeni

а вот этого мало? в крайнем случае, если нет файловой системы(например, какой-нибудь микроконтроллер), можно поставить ПК, который будет тебе это время по беспроводной сети пересылать

Маловато. Во-первых, возвращается локальное время сервера, зависящее исключительно от предпочтений админа. Во-вторых, каждую секунду дёргать файловую систему ради получения точного времени — тоже сомнительная идея, которая при массовом использовании вряд ли будет одобрена админом.

 

Самый правильный способ, на мой взгляд, как уже предложил @ivan52945, использовать ComputerCraft для отслеживания рестарта сервера. А время корректировать сразу после рестрата и каждые 15 минут, например.

 

Интересно было бы рассмотреть возможность использования каких-либо схем на красной пыли, но единственное, что я смог сразу вспомнить — это сенсор робота-рыбака, сбивающийся при выгрузке чанка. Вряд ли кто-то захочет использовать такую схему в часах.

 

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
Маловато. Во-первых, возвращается локальное время сервера, зависящее исключительно от предпочтений админа. Во-вторых, каждую секунду дёргать файловую систему ради получения точного времени — тоже сомнительная идея, которая при массовом использовании вряд ли будет одобрена админом.

 

ну это сильно драматизированный взгляд на суть вопроса. Не все так там страшно, как оно кажется. Нет никаких предпочтений админов :)

Я никогда не видел хоста и тем более админа, который бы установил время и календарь майя  на своем сервере, или вообще от балды дату там засетил. Даже если это вдруг и так, то, на минуточку, где гарантия, что на сайтах точного времени админ тамошний без предпочтений))) Это первое.

Второе. Как правило, в ОС включена опция

    # Whether persistent file systems such as disk drives should be
    # 'buffered', and only written to disk when the world is saved. This
    # applies to all hard drives. The advantage of having this enabled is that
    # data will never go 'out of sync' with the computer's state if the game
    # crashes. The price is slightly higher memory consumption, since all
    # loaded files have to be kept in memory (loaded as in when the hard drive
    # is in a computer).
    
    bufferChanges=true

а это значит, что вся файловая система забуферизирована в ОЗУ и никакого лишнего "дергания" жесткого диска хоста не происходит. ОС глобально сохраняет изменения на диск не чаще, чем раз в 30 сек, а может и реже. Так что можно смело отслеживать fs.lastModified

 

Ну и самое главное. В детском майнкрафте сложно представить ситуацию, где требуется супер точное астрономическое время вплоть до иоктосекунд, а также высокая частота его получения. Это же не полет Вояджера какой-то. Что там в майне? Как правило, нужно залогинить ивент, когда именно Mishutka12 купил алмазики в админшопе за UU, чтобы отчетность была, или, например, поймайть точное время и дату, когда Квертик нарисовался в радиусе радаров и его засекли сенсоры охранной системы, когда он шастал возле чужого домика и вынюхивал, что можно грифануть, или, например, время записать, когда 2-й энергоблок реактора выработал урановые стержни и стопнулся. Вот тогда-то и пригодится получение времени. Вот и все. Даже если делать детские ссаные бесполезные часики на каком-то экране, как многие любят это делать в своих домиках, то не обязательно там получать и принтить секунды, минут, я думаю, будет достаточно, но можно и ежесекундно проверять, хоть это и дичь, конечно :)

 

Так что, скорее всего, способ получения времени из даты модификации файла - самый менее ресурсозатратный, мгновенный и безотказный, уж тем более в случае, если кому-то вдруг взбрендит в голову слать ежесекундно get запросы куда-то в какую-то удаленную попку или что-то на редстоуне городить)

  • Like 3

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


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

 

 

Даже если делать детские ссаные бесполезные часики на каком-то экране, как многие любят это делать в своих домиках, то не обязательно там получать и принтить секунды, минут, я думаю, будет достаточно, но можно и ежесекундно проверять, хоть это и дичь, конечно

 

Мне кажется, для часиков там достаточно при старте (и потом где-нибудь раз в час) синхронизировать состояние. А потом просто слипами отсчитывать секунды / минуты.
Минимум нагрузки, приемлемая точность.

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


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

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

Представить сложно, но ТС хочет получить (цитата) "реальное московское время", не уточнив, правда, насколько оно должно быть близким к реальному.

 

Одного игрока устроит погрешность и в одну-две минуты, а какой-то маньяк будет пытаться довести ее до хотя бы 200ms. Это первый нюанс, создающий почву для дискуссии о методах получения времени и создаваемой при этом нагрузки.

 

Второй нюанс в том, что игровые сервера бывают разные, и на каких-то из них ход часов может быть пущен на самотек, вынуждая игроков обращаться к внешним серверам и писать своё подобие ntpd. Если при этом серверное время еще иногда и корректируется рывками, то тут остаётся лишь постоянно долбить внешние сервера, пока те не забанят. Или придется снизить требования точности.

 

Мне кажется, для часиков там достаточно при старте (и потом где-нибудь раз в час) синхронизировать состояние. А потом просто слипами отсчитывать секунды / минуты. Минимум нагрузки, приемлемая точность.

Вычисление времени через разницу computer.uptimeочень эффективно, но, к сожалению, чувствительно к рестартам игрового сервера и выгрузке чанков. Время от времени придётся сверяться с другими источниками. Интервал сверки определяется точностью, на которую игрок нацелен.

 

вся файловая система забуферизирована в ОЗУ и никакого лишнего "дергания" жесткого диска хоста не происходит. ОС глобально сохраняет изменения на диск не чаще, чем раз в 30 сек, а может и реже.

Интересная информация. Надо будет как-нибудь стресс-тест прогнать.

 

Так что, скорее всего, способ получения времени из даты модификации файла - самый менее ресурсозатратный, мгновенный и безотказный, уж тем более в случае, если кому-то вдруг взбрендит в голову слать ежесекундно get запросы куда-то в какую-то удаленную попку или что-то на редстоуне городить)

Согласен, трудно найти что-то лучше. Для логирования событий на сервере Майнкрафта этот способ вне конкуренции. А если на сервере уже есть вменяемая синхронизация времени, то и для остальных целей тоже – лучший способ. Но, как говорилось, дьявол кроется в деталях. Игроки и сервера бывают разные. Рядовой игрок Майнкрафта не знает, какой способ синхронизации часов сервера выбрал админ, как сильно часы будут отставать или убегать и какие рывки они совершат в будущем. Как и админ не знает заранее, насколько часто любителей точного времени будут дёргать файловую систему, и сколько их окажется на сервере в одном интервале времени.

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


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

Чё вы так все, я вообще не для OpenComputers. Я просто хочу сделать луа скрипт который бы синкал время мск, и выставлял дату в винде

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


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

Чё вы так все, я вообще не для OpenComputers. Я просто хочу сделать луа скрипт который бы синкал время мск, и выставлял дату в винде

Пфхахаха! Действительно, а что это мы. Нам лишь бы про Lua, да OpenComputers флудить. Да еще и про ComputerCraft иногда.

 

Для выставления времени в винде не нужен скрипт. Находишь в интернете какой-нибудь NTP-сервер, да прописываешь его в настройках. Да и наверняка какой-нибудь time.windows.com уже прописан, осталось только галочку поставить для синхронизации.

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


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

Пфхахаха! Действительно, а что это мы. Нам лишь бы про Lua, да OpenComputers флудить. Да еще и про ComputerCraft иногда.

 

Для выставления времени в винде не нужен скрипт. Находишь в интернете какой-нибудь NTP-сервер, да прописываешь его в настройках. Да и наверняка какой-нибудь time.windows.com уже прописан, осталось только галочку поставить для синхронизации.

аля время сети и дата сети(если 10-ка)

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×