Клиенты со всего мира могут отправлять определенные «запросы» на мое серверное приложение. Все эти клиенты находятся в разных часовых поясах.
Для каждого запроса мне нужно отобразить запрос на внутренний экземпляр класса C ++. Каждый экземпляр класса имеет некоторую информацию о своем «местоположении», которая также указывается часовым поясом.
Каждый клиент может отправлять запросы, касающиеся экземпляров, принадлежащих к различным часовым поясам. Чтобы мои клиенты не могли самостоятельно конвертировать все в часовой пояс целевого экземпляра, я должен сам все конвертировать из одного часового пояса в другой. Однако я нахожу только в C ++ (неуправляемые, собственные) функции для преобразования времени между местным временем и GTM, но не из / в часовой пояс, который не является вашим текущим часовым поясом.
Я мог бы попросить своих клиентов отправлять каждую дату в формате UTC или GTM, но это не решает мою проблему, так как мне все еще нужно преобразовать это в часовой пояс «экземпляра», который может быть любым часовым поясом в мир.
Мне также кажется, что я не могу найти функцию Windows, которая делает это. Я обнаружил, что это управляемый класс .Net, но я хочу, чтобы мое приложение оставалось строго неуправляемым.
Существуют ли какие-либо функции Windows (XP, Vista, 7, 2003, 2008), которые я могу использовать (и которые я упустил из виду в документации), или есть какие-либо другие бесплатные алгоритмы, которые могут преобразовывать один часовой пояс в другой?
Обратите внимание, что проблема связана не с GMT-разницей, а с фактическим моментом перехода DST, который, похоже, зависит от часового пояса. Например:
- Западная Европа переходит от не-ТЛЧ к ТЛЧ в последнее воскресенье перед 1 апреля.
- США переходит от летнего времени к летнему времени во второе воскресенье после 1 марта.
- В Китае нет летнего времени.
- Австралия переходит с не-летнего времени на летнее время в первое воскресенье после 1-го октября.
Вся эта информация о DST-переходах доступна где-то в реестре Windows. Проблема в том, какую функцию Windows я могу использовать для использования этой информации.