2 приложения 2 часовых пояса, могу ли я программировать вокруг этого? - PullRequest
1 голос
/ 24 февраля 2010

Мне почти нечестно задавать этот вопрос, но я застрял в неудачном положении.

Мы спешим, чтобы обеспечить очень быстрое и грязное временное решение. Нам нужно запустить 2 сторонних приложения (к счастью, не одновременно). Приложения сильно зависят от времени. Один требует GMT, а другой - BST (британское летнее время). Так что в британском летнем времени GMT и BST отличаются на час.

Мы хотели бы написать небольшое приложение, которое может изменить системное время перед запуском соответствующего приложения. Это оказывается немного сложнее, чем звучит. Основная проблема в том, что вы не можете знать, что время правильное, прежде чем менять его. Возможно, ноутбук был выключен без надлежащего выхода из нашего приложения (проблемы с аккумулятором и т. Д.).

Мы можем синхронизировать время с сервером по сети. Но я не смог определить, когда это произошло. Я обнаружил, что есть сообщение окна WM_TIMECHANGED, которое транслируется, когда установлено время. Так что это может быть использовано.

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


A working example of this would be:
1: Laptop set to BST (Current time is 13:00)
2: Open app one (GMT) time will change to 12:00
3: Close app one (GMT) time will change to 13:00
4: Open app one (BST) time will remain at 13:00
5: Close app one (BST) time will change to 13:00

У кого-нибудь есть какие-нибудь умные идеи?

Ответы [ 3 ]

0 голосов
/ 24 февраля 2010

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

EDIT: Поскольку вы не всегда можете получить доступ к сети, вы должны предположить, что время правильно (то есть вы не можете его изменить), если приложения вызывают GetLocalTime (вместо GetSystemTime), тогда вы можете изменить часовой пояс вместо времени, чтобы настроить результат GetLocalTime.

Если приложения вызывают GetSystemTime (для этого вам нужно изменить время), вам понадобится маркер (например, файл на диске), который сообщит вашему приложению, что вы изменили время и не смогли изменить его обратно. (из-за неожиданного прекращения). Таким образом, вы всегда будете знать, что время было правильным (маркер отсутствует) или время было смещено (маркер присутствует)

0 голосов
/ 03 сентября 2012

Не совсем решение, но мы работали над тем, чтобы оба приложения были в конце.

Спасибо

0 голосов
/ 24 февраля 2010

запустить одно приложение на ВМ

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