Синхронизация времени, но игнорирование часовых поясов - PullRequest
0 голосов
/ 30 марта 2009

У меня есть приложение, которое я хочу иметь функцию, которая синхронизирует системные часы Windows, но только устанавливает минуты, если, например, системное время не 13:58, а сервер времени 14:02, в этом случае час тоже должен быть изменен. Дело в том, что я не хочу использовать часы / дни сервера времени и т. Д., Потому что я хочу, чтобы пользователь мог устанавливать часы в любое время (независимо от часового пояса), но чтобы он все еще синхронизировался.

Например, даже если часовой пояс Windows установлен в PST и пользователь устанавливает часы на 5 часов в будущем без изменения часового пояса, я хочу, чтобы система синхронизировалась правильно, сохраняя ее на 5 часов в будущем.

Существует ли алгоритм, который мог бы рассчитывать, следует ли устанавливать час вперед или назад на час в зависимости от минут, но без учета каких-либо факторов часового пояса? Если система - 15:59, а сервер - 16:02, система должна быть настроена на 16:02, а не на 15:02 (что было бы, если бы это изменило только минуты). Если система - 15:28, а сервер - 16:02, система должна быть настроена на 15:02. Я уже давно об этом думаю, но никак не могу понять, как мне поступить!

У меня уже есть код для получения даты и времени сервера времени и системного времени (я использую delphi), так что это просто вопрос расчета того, что с ним делать.

Спасибо за ваше время.

Ответы [ 4 ]

3 голосов
/ 30 марта 2009

Похоже, что вам действительно нужно просто синхронизировать время UTC клиентского компьютера с тем, чтобы оно совпадало с временем UTC сервера, независимо от часовых поясов сервера или клиента.

Вы захотите найти API для получения и установки времени на основе UTC.

То, что может не быть тем, что вы хотите, потому что я не до конца понял ваш вопрос с точки зрения пользователя, настраивающего свою машину на 5 часов в будущем ...

2 голосов
/ 30 марта 2009

Получить серверное время, вычесть N часов, установить местное время. Нет проблем.

Время - это действительное число. Часы, минуты, секунды и т. Д. - это просто формат представления.

Если вам нужно включить в свои расчеты часовые пояса, используйте мой GpTimezone ( описание ).

2 голосов
/ 30 марта 2009

Не забывайте, что есть некоторые часовые пояса, которые не находятся на часовых границах ... если часы пользователя в 13:30, а сервер в 13:00, как вы знаете, пользователь просто не в Ньюфаундленде чем (скажем) Монреаль.

Я думаю, что предложение Джона о UTC - это путь.

0 голосов
/ 30 марта 2009

Вы можете просто сравнить минуты, и если вам> 55, а системе <05, тогда увеличьте свой час. Сделайте что-то подобное и для другого краевого условия. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...