Я пытаюсь написать функцию, которая преобразует время между часовыми поясами.
Например:
convertedTime = TimezoneConvert("15/03/2020 12:00", "Central Standard Time", "Turkey Standard Time")
Теперь ... до сих пор работает так, что это циклы через ключ каждого часового пояса в реестре (HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones) и считывает строковые значения "Std" и "Dlt". Как только он находит соответствующую строку для указанного параметра часового пояса, он заполняет объект TIME_ZONE_INFORMATION соответствующими данными.
Private Type TIME_ZONE_INFORMATION
Bias As Long
StandardName(0 To 31) As Integer
StandardDate As SYSTEMTIME
StandardBias As Long
DaylightName(0 To 31) As Integer
DaylightDate As SYSTEMTIME
DaylightBias As Long
End Type
Затем он использует информацию в этом объекте для преобразования.
Функция в настоящее время работает для перехода на летнее время, но пользователь должен знать, что она действует, и вызывать функцию следующим образом:
convertedTime = TimezoneConvert("15/03/2020 12:00", "Central Summer Time", "Turkey Standard Time")
Мне просто интересно, есть ли что-нибудь в в реестре или на самом windows, который определяет, действует ли на данный момент часовой пояс, такой как «Центральное стандартное время», на летнее время? Таким образом, я могу изменить код таким образом, чтобы, если в качестве параметра было введено «Центральное стандартное время», оно могло возвращать правильное время с применением перехода на летнее время.
Если нет, у кого-нибудь есть какие-либо предложения как это может быть достигнуто?
Я взглянул на windows API-метод GetTimeZoneInformation, но, похоже, он возвращает объект часового пояса только для локального времени на машине.
Я знаю, что вы можете сделать это с объектом outlook, используя метод .ConvertTime, однако это приложение может быть установлено на компьютерах, где outlook отсутствует.