• Бесплатный ВЕБИНАР по OSINT с Екатериной Тьюринг: ➡️9 февраля в 19:00 (мск) пройдет урок

    Как безопасно искать информацию в открытых источниках

    🔥 Записаться 🔥

Перевод часов на летнее/зимнее время

  • Автор темы Автор темы Hmarik
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
H

Hmarik

Привет.
Может кому попадался на глаза алгоритм расчета ближайшего перевода часов на летнее/зимнее время?
 
на зимнее время переходят обычно в 3:00 последнего воскресенья октября -1 час
на летнее время в 2:00 последнего воскресенья марта +1 час
 
Так это то понятно.. вот и нужен алгоритм, который расчитает ближайшую точную дату и время.
 
Есть текущее время, есть время ближайшего перевода... Нужно всего лишь определить разницу между 2-мя значениями времени в используемом тобой формате
 
Для: European
Так нету то точной даты ближайшего перевода времени, ее то и нужно выстчитать...
Есть только информация доступная по функции GetTimeZoneInformation.
Там есть что нужно переводить напрмер в последее воскресенье октября и т.д.
Так вот и нужен проверенный алгоритм расчета ТОЧНОЙ даты..
Можно писать самому, но я вот думал что может уже кто сталкивался и есть готовый код....
 
Для: Hmarik
Тогда понятно, получается что я в Тулу со своим самоваром... Кода готового, к сожалению, нет.
 
TIME_ZONE_INFORMATION

The TIME_ZONE_INFORMATION structure specifies information specific to the time zone.

8<-----

Members

8<-----

StandardDate
A SYSTEMTIME structure that contains a date and local time when the transition from daylight saving time to standard time occurs on this operating system. If this date is not specified, the wMonth member in the SYSTEMTIME structure must be zero. If this date is specified, the DaylightDate value in the TIME_ZONE_INFORMATION structure must also be specified.
To select the correct day in the month, set the wYear member to zero, the wDayOfWeek member to an appropriate weekday, and the wDay member to a value in the range 1 through 5. Using this notation, the first Sunday in April can be specified, as can the last Thursday in October (5 is equal to "the last").

8<-----

DaylightName
Pointer to a null-terminated string associated with daylight saving time on this operating system. For example, this member could contain "PDT" to indicate Pacific Daylight Time. This string is not used by the operating system, so anything stored there by using the SetTimeZoneInformation function is returned unchanged by the GetTimeZoneInformation function. This string can be empty.
DaylightDate
A SYSTEMTIME structure that contains a date and local time when the transition from standard time to daylight saving time occurs on this operating system. If this date is not specified, the wMonth member in the SYSTEMTIME structure must be zero. If this date is specified, the StandardDate value in the TIME_ZONE_INFORMATION structure must also be specified.
To select the correct day in the month, set the wYear member to zero, the wDayOfWeek member to an appropriate weekday, and the wDay member to a value in the range 1 through 5. Using this notation, the first Sunday in April can be specified, as can the last Thursday in October (5 is equal to "the last").

з.ы. лишнее почикано
 
Для: ????
... вы издеваетесь?

Либо я очень плохо пытаюсь выразить свои мысли.... либо второе...

Попробую еще раз.

Я могу получить данные функцией GetTimeZoneInformation... она естественно возвращает структуру TIME_ZONE_INFORMATION, в которой Я ЗНАЮ что написано... там есть информация типа что переводим часы в последнее воскресенье октября или там первое воскресень апреля.
Внимание вопрос: как узнать ТОЧНУЮ (конерктную, напрмер 1 апреля 2007 года) следующую дату перевода часов.
Например имеем сегодня 29 явнваря 2007. Следущий перевод часов 1 апреля 2007 года.
Если бы сегодня было 10 августа 2007, то следующий перевод например был бы 29 октября 2007 года и т.д.
 
if (Сегодняшняя_Дата > DaylightName)
{
перевод_будет_StandardDate();
}
else
{
перевод_будет_DaylightName();
}

или есть проблемы с переводом информации в полях DaylightName и StandardDate к системной дате.

З.Ы. Я не издеваюсь, я действительно не понимаю.
 
Для: ????
... я что то недопонимаю...

Как можно DaylightName перевести в дату?.. из МСДН - это просто название, это строка... например для Беларуси это "FLE Daylight Time".

А так же вы смотрели что хранится в StandardDate, читали МСДН?... Я конешна может чего не дочитал... и не допонял.. может как то можно вызывать эту функцию что она вернула конкретную дату... Но попробывав вызвать эту функцию я получаю результат
wYear 0 unsigned short
wMonth 10 unsigned short
wDayOfWeek 0 unsigned short
wDay 5 unsigned short
wHour 4 unsigned short
wMinute 0 unsigned short
wSecond 0 unsigned short
wMilliseconds 0 unsigned short

А теперь поясните как это легко и быстро перевести в системную дату...
 
Если вопрос стоит в том, как получить дату последнего воскресенья октября, например, то видимо, так: вычислить , на какой день недели приходится 31 октября, и вычесть номер дня из 31. Как вычислить день недели - смотри гугл, помню была какая-то хитрая формула в одну строчку, а может можно и методами CTime.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!