Перейти к содержанию
Fire Monkey от А до Я
  • 0

Получение времени от серверов времени


Bob32

Вопрос

Добрый день!

подскажите пожалуйста, а есть компоненты, либо другой проверенный способ, чтобы получать точное время от каких-либо централизованных служб в Инете?

 

мне нужно синхронизировать по времени события на разных телефонах.

Ссылка на комментарий

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

  • 0

если даже не использовать NTP

При каждом HTTP запросе в ответе приходят заголовки. Например

Connection: keep-alive
Strict-Transport-Security: max-age=0
Content-Encoding: 
Content-Type: text/html; charset=utf-8
Date: Fri, 05 Apr 2019 07:02:28 GMT
Server: nginx
 

Ссылка на комментарий
  • 0
4 часа назад, krapotkin сказал:

если даже не использовать NTP

При каждом HTTP запросе в ответе приходят заголовки. Например

Connection: keep-alive
Strict-Transport-Security: max-age=0
Content-Encoding: 
Content-Type: text/html; charset=utf-8
Date: Fri, 05 Apr 2019 07:02:28 GMT
Server: nginx
 

Те - брать и читать какой-нить урл и брать время из заголовков? 

А NTP время как отдают? Может есть у кого-то пример кода?

Ссылка на комментарий
  • 0

TIdTime is a client implementation of the Time Protocol as described in the Internet Standards document:

RFC 868 - Time Protocol (http://www.rfc-editor.org/rfc/rfc868.txt)

Time is a simple protocol for synchronizing time on a local network. For a time protocol with higher accuracy over several networks, use TIdSNTP. To retrieve the current date and time in human-readable form, use TIdDayTime.

Please note that the Time Protocol in its current form cannot handle most dates after the year 2035. This limitation is stated in RFC 868.

Ссылка на комментарий
  • 0

Протокол SNTP

 

Помимо NTP, существует упрощенная версия этого протокола - SNTP (Simple Network Time Protocol). Он реализован для синхронизации времени конечным клиентом, поскольку все преимущества протокола NTP проявляются именно в сети серверов, а для получения показаний конечным пользователем NTP излишне сложен. Поэтому для синхронизации времени конечными компьютерами и серверами был предложен протокол SNTP (SNTPv3: 1992 г., RFC1361 и 1995 г., RFC1769; SNTPv4 включён как подпротокол в NTPv4).

На самом деле SNTP - это не новый протокол, а способ использования NTP-пакетов и NTP-серверов в приложениях, где не требуется высокоточное время, либо оно недостижимо. В этом случае клиент использует только часть информации UDP-пакета NTP-сервера. SNTP-клиент может работать с любыми версиями NTP-серверов, и кроме них - с особыми SNTP-серверами, которые в откликах заполняют только необходимые данные UDP-пакета.

Таким образом, "облегченный" SNTP образует не сеть синхронизирующихся серверов, а пары "клиент-сервер". Любой NTP-сервер является одновременно SNTP-сервером. Клиент, который не передаёт полученное время дальше, может работать как NTP- или SNTP-клиент, в зависимости от условий. Для SNTP, как и для NTP, зарезервирован 123-й UDP-порт.

 

Uses IdSNTP, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient;
....
procedure TForm1.Button2Click(Sender: TObject);
Var IdSNTP: TIdSNTP;
begin
  IdSNTP:=TIdSNTP.Create(Self);
  IdSNTP.Host := 'ntp1.stratum2.ru';
  ShowMessage(DateTimeToStr(IdSNTP.DateTime));
  IdSNTP.Free;
end;

 

Ссылка на комментарий
  • 0
10 часов назад, Евгений Корепов сказал:

Протокол SNTP

 

Помимо NTP, существует упрощенная версия этого протокола - SNTP (Simple Network Time Protocol). Он реализован для синхронизации времени конечным клиентом, поскольку все преимущества протокола NTP проявляются именно в сети серверов, а для получения показаний конечным пользователем NTP излишне сложен. Поэтому для синхронизации времени конечными компьютерами и серверами был предложен протокол SNTP (SNTPv3: 1992 г., RFC1361 и 1995 г., RFC1769; SNTPv4 включён как подпротокол в NTPv4).

На самом деле SNTP - это не новый протокол, а способ использования NTP-пакетов и NTP-серверов в приложениях, где не требуется высокоточное время, либо оно недостижимо. В этом случае клиент использует только часть информации UDP-пакета NTP-сервера. SNTP-клиент может работать с любыми версиями NTP-серверов, и кроме них - с особыми SNTP-серверами, которые в откликах заполняют только необходимые данные UDP-пакета.

Таким образом, "облегченный" SNTP образует не сеть синхронизирующихся серверов, а пары "клиент-сервер". Любой NTP-сервер является одновременно SNTP-сервером. Клиент, который не передаёт полученное время дальше, может работать как NTP- или SNTP-клиент, в зависимости от условий. Для SNTP, как и для NTP, зарезервирован 123-й UDP-порт.

 


Uses IdSNTP, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient;
....
procedure TForm1.Button2Click(Sender: TObject);
Var IdSNTP: TIdSNTP;
begin
  IdSNTP:=TIdSNTP.Create(Self);
  IdSNTP.Host := 'ntp1.stratum2.ru';
  ShowMessage(DateTimeToStr(IdSNTP.DateTime));
  IdSNTP.Free;
end;

 

Спасибо огромное персонально!

Все работает!

Но время отдается в каком-то американском часовом поясе (отличается от московского на 10 часов).

хелп на класс TIdSNTP у меня почему-то отсутствует. (

можно конечно по колхозному к московскому времени привести, но может есть более правильный метод (или свойство) этого класса?

Ссылка на комментарий
  • 0

Стоял левый часовой пояс в настройках телефона. Поставил московский -время изменилось но, снова не в том часовом поясе. ;) 

Сейчас показывает 7:27, а должно 13:27

Ссылка на комментарий
  • 0
28 минут назад, Bob32 сказал:

Стоял левый часовой пояс в настройках телефона. Поставил московский -время изменилось но, снова не в том часовом поясе. ;) 

Сейчас показывает 7:27, а должно 13:27

Посмотрите исходники модуля IdSNTP - там все достаточно просто (всего 300 строк кода). Может пошаговый дебаг поможет понять откуда берется ошибка. На винде у меня правильное время отдает, на андроиде не пробовал.

Ссылка на комментарий
  • 0
50 минут назад, Bob32 сказал:

Стоял левый часовой пояс в настройках телефона. Поставил московский -время изменилось но, снова не в том часовом поясе. ;) 

Сейчас показывает 7:27, а должно 13:27

Какая версия среды у вас и какая версия Indy? Возможно проблема в старой версии Indy, погуглите "delphi indy OffsetFromUTC" - там были какие то проблемы, и вроде они исправлены.

У меня вот такая версия (в Rio с последним апдейтом). Узнать версию - киньте любой компонент Indy на форму, правой кнопкой по компоненту и About. 

image.png.809e6947de20e9528bfd9fdbcd8e82b7.png

Повторюсь - на андроиде я не проверял правильность работы.

Изменено пользователем Евгений Корепов
Ссылка на комментарий
  • 0
1 час назад, Евгений Корепов сказал:

Какая версия среды у вас и какая версия Indy? Возможно проблема в старой версии Indy, погуглите "delphi indy OffsetFromUTC" - там были какие то проблемы, и вроде они исправлены.

У меня вот такая версия (в Rio с последним апдейтом). Узнать версию - киньте любой компонент Indy на форму, правой кнопкой по компоненту и About. 

image.png.809e6947de20e9528bfd9fdbcd8e82b7.png

Повторюсь - на андроиде я не проверял правильность работы.

Версия, такая же, как у Вас.

попробую вот это как стемнеет )

 

DB48E037-7D0F-4863-8EFC-8D94B46E8FD5.png

Ссылка на комментарий
  • 0
45 минут назад, Bob32 сказал:

Версия, такая же, как у Вас.

попробую вот это как стемнеет )

 

DB48E037-7D0F-4863-8EFC-8D94B46E8FD5.png

Интересно! Обязательно сообщите результаты! )))

Ссылка на комментарий
  • 0
В ‎06‎.‎04‎.‎2019 в 16:19, Евгений Корепов сказал:

Интересно! Обязательно сообщите результаты! )))

руки дошли только сегодня и то пока криво )

файл нашел, скопировал в директорию проекта, и там отредактировал.

но этот файл  IdGlobalProtocols.pas - это не в чистом виде модуль библиотеки Indi.

Что значит "add the edited file to your project"? просто списать в каталог проекта - этого вероятно будет недостаточно )

Ссылка на комментарий
  • 0
4 часа назад, Bob32 сказал:

руки дошли только сегодня и то пока криво )

файл нашел, скопировал в директорию проекта, и там отредактировал.

но этот файл  IdGlobalProtocols.pas - это не в чистом виде модуль библиотеки Indi.

Что значит "add the edited file to your project"? просто списать в каталог проекта - этого вероятно будет недостаточно )

Просто закиньте в паку с проектом, этого думаю достаточно.

P.S. для проверки напечатайте какую нибудь явную ересь в этом файле - если компилер ругнется на ошибку, значит он нужный файл подключает к проекту.

Изменено пользователем Евгений Корепов
Ссылка на комментарий

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

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...