2009-03-30 4 views
0

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

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

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

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

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

+0

В чем причина того, что часы настроены на «местное время»? может ли пользователь просто изменить свой часовой пояс на соответствующее смещение? –

ответ

3

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

Вы должны найти API-интерфейсы, чтобы получить и установить время, основанное на UTC.

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

+0

В ответ на это, в принципе, часы могут быть намеренно установлены часы в будущем/прошлом, и в этом случае использование UTC, возможно, не является опцией, так как я полагаю, что это исправит время, основанное на часовом поясе Windows? Что не является желаемым поведением. – 2009-03-30 14:23:20

+0

Это не исправит его на основе часового пояса Windows - он исправит его на основе UTC.Какой действительный пример использования для умышленного ввода системных часов в несколько часов? Если вы заметили, что время составляет 30 минут, ожидаете ли вы, что он переместит время вперед на 30 минут или обратно? –

0

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

2

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

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

+1

Действительно. Есть даже некоторые раздражающие, выровненные на 15-минутных границах, что не дает вам столько свободы, чтобы рассказать о разнице между часами, которые немного, и тем, что находится в другом часовом поясе. – bobince

2

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

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

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

Смежные вопросы