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

Тема в разделе "Общие вопросы по С и С++", создана пользователем Hmarik, 25 янв 2007.

Статус темы:
Закрыта.
  1. Hmarik

    Hmarik Гость

    Привет.
    Может кому попадался на глаза алгоритм расчета ближайшего перевода часов на летнее/зимнее время?
     
  2. Maxx

    Maxx Гость

    на зимнее время переходят обычно в 3:00 последнего воскресенья октября -1 час
    на летнее время в 2:00 последнего воскресенья марта +1 час
     
  3. Hmarik

    Hmarik Гость

    Так это то понятно.. вот и нужен алгоритм, который расчитает ближайшую точную дату и время.
     
  4. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Есть текущее время, есть время ближайшего перевода... Нужно всего лишь определить разницу между 2-мя значениями времени в используемом тобой формате
     
  5. Hmarik

    Hmarik Гость

    Для: European
    Так нету то точной даты ближайшего перевода времени, ее то и нужно выстчитать...
    Есть только информация доступная по функции GetTimeZoneInformation.
    Там есть что нужно переводить напрмер в последее воскресенье октября и т.д.
    Так вот и нужен проверенный алгоритм расчета ТОЧНОЙ даты..
    Можно писать самому, но я вот думал что может уже кто сталкивался и есть готовый код....
     
  6. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Для: Hmarik
    Тогда понятно, получается что я в Тулу со своим самоваром... Кода готового, к сожалению, нет.
     
  7. ????

    ???? Гость

    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").

    з.ы. лишнее почикано
     
  8. Hmarik

    Hmarik Гость

    Для: ????
    ... вы издеваетесь?

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

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

    Я могу получить данные функцией GetTimeZoneInformation... она естественно возвращает структуру TIME_ZONE_INFORMATION, в которой Я ЗНАЮ что написано... там есть информация типа что переводим часы в последнее воскресенье октября или там первое воскресень апреля.
    Внимание вопрос: как узнать ТОЧНУЮ (конерктную, напрмер 1 апреля 2007 года) следующую дату перевода часов.
    Например имеем сегодня 29 явнваря 2007. Следущий перевод часов 1 апреля 2007 года.
    Если бы сегодня было 10 августа 2007, то следующий перевод например был бы 29 октября 2007 года и т.д.
     
  9. ????

    ???? Гость

    if (Сегодняшняя_Дата > DaylightName)
    {
    перевод_будет_StandardDate();
    }
    else
    {
    перевод_будет_DaylightName();
    }

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

    З.Ы. Я не издеваюсь, я действительно не понимаю.
     
  10. Hmarik

    Hmarik Гость

    Для: ????
    ... я что то недопонимаю...

    Как можно 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

    А теперь поясните как это легко и быстро перевести в системную дату...
     
  11. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Если вопрос стоит в том, как получить дату последнего воскресенья октября, например, то видимо, так: вычислить , на какой день недели приходится 31 октября, и вычесть номер дня из 31. Как вычислить день недели - смотри гугл, помню была какая-то хитрая формула в одну строчку, а может можно и методами CTime.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей