Перейти к содержанию
  • Регистрация
  • 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
55 минут назад, Bob32 сказал:

Но время отдается в каком-то американском часовом поясе

У меня совпадает с московским

время.png

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


Ссылка на сообщение
Поделиться на другие сайты
  • 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
В ‎06‎.‎04‎.‎2019 в 16:19, Евгений Корепов сказал:

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

а если заменить исходный файл - то как перекомпилить Инди?

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
4 часа назад, Bob32 сказал:

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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