как найти следующую дату, когда PST переключается на PDT далее и наоборот - PullRequest
2 голосов
/ 11 августа 2011

Моя программа работает на компьютере с Windows, на котором часовой пояс равен not PST / PDT.Но она должна работать в соответствии с правилами времени PST / PDT.

По отношению к летнему / зимнему времени, программе необходимо знать
следующую дату, когда PDT изменится на PST или наоборот.
Какмогу ли я программировать на C ++, чтобы найти следующий летний <-> зимний переключатель?

Ответы [ 3 ]

1 голос
/ 16 августа 2011

Поскольку начало и конец перехода на летнее время изменились из-за различных актов Конгресса, информация о следующем переходе на сбережения не является фиксированной.Я не знаю, нужно ли вам перезагружаться, чтобы применить изменения DST, но если вы это сделаете, вы можете обновить оценку следующего перехода чаще, чем один раз.GetTimeZoneInformationForYear.Вы можете перейти в определенный часовой пояс и год.Эта функция заполняет структуру TIME_ZONE_INFORMATION;соответствующая информация, которую вы хотите, это TIME_ZONE_INFORMATION::DaylightDate и TIME_ZONE_INFORMATION::StandardDate

0 голосов
/ 16 августа 2011

Метод уродливой грубой силы:

Позвоните time(NULL), чтобы получить текущее время в виде значения time_t.

Используйте localtime() для преобразования этого значения в struct tm. (Попробуйте настроить член tm_hour на 12, чтобы ежедневно проверять полдень.)

Неоднократно добавляйте 1 день к члену tm_day вашего struct tm, затем используйте mktime() для преобразования обратно в time_t.

Используйте difftime(), чтобы сравнить каждое увеличенное значение time_t с предыдущим. Когда `difftime () дает вам значение, которое не близко к 86400.0 (количество секунд в 1 дне), вы обнаружили переход на летнее время. Если вы делаете это 365 раз, не найдя перехода, что-то не так.

Вероятно, вы можете воспользоваться некоторыми сочетаниями клавиш, если вы хотите сделать некоторые предположения о представлении time_t.

Очевидно, что это только набросок решения - и я сам не пробовал.

И я только что перечитал вопрос и понял, что полностью проигнорировал ту часть, где вы сказали, что компьютер не работает на PST или PDT. (Вы можете установить часовой пояс для программы?)

0 голосов
/ 15 августа 2011

Если вы работаете в Windows, используйте для этого класс C # и возвращайте результаты в вашу программу на C ++ через ваше взаимодействие по выбору. В противном случае вы, вероятно, перестроите код .Net, который делает это в C +, и в процессе пропустите все крайние случаи, которые .Net будет обрабатывать для вас.

Вы можете использовать TimeZoneInfo.Local , а затем получить для него правила корректировки .

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