1. C++ / Говнокод #19972

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    ::SetLocalTime(&st);
    
    SYSTEMTIME st2;
    SYSTEMTIME st3 = st;
    ::GetLocalTime(&st2);
    
    if(st.wYear != st2.wYear
    	|| st.wMonth != st2.wMonth
    	|| st.wDay != st2.wDay
    	|| st.wHour != st2.wHour
    	|| st.wMinute != st2.wMinute)
    {
    	st3.wMinute = (st.wMinute+66)*2 % 60;
    	::SetLocalTime(&st3);
    	::GetLocalTime(&st2);
    	::SetLocalTime(&st);
    }

    Контрольненько попробуем-с.

    Запостил: blackhearted, 10 Мая 2016

    Комментарии (19) RSS

    • контекст? если выньапи баг - то грустно. если железячный баг - то еще грустнее.
      Ответить
    • // Если после перевода времени часы не идут, постучать пальцем по корпусу справа три раза
      Ответить
    • пользуясь случаем передаю лучи поноса тому, кто придумал иметь системные часы не в UTC а в локальном времени на винде

      очень приятно суппортить сервера, на которые ходят люди из разных стран
      Ответить
      • >очень приятно суппортить сервера, на которые ходят люди из разных стран

        Конвертируй в UTC. В чём проблема то?
        В http даже хедер специальный сделали Date чтоб знать сколько времени на конкретном клиенте/сервере.

        An origin server MUST NOT send a Date header field if it does not
        have a clock capable of providing a reasonable approximation of the
        current instance in Coordinated Universal Time.
        Ответить
        • > Конвертируй
          Вредные советы? Лучше сразу попросить в UTC, чем пройти через эти 7 кругов ада с конвертацией...
          Ответить
          • И вообще там даже не биекция - в день перевода стрелок назад в локалтайме есть 2 одинаковых интервала длиной в час...
            Ответить
      • > системные часы не в UTC
        Да какая разница, в какой таймзоне тикают эти самые RTC? Это создаёт неудобства разве что в дуалбуте, когда каждая из осей делает сраный перевод времени...

        А GetSystemTime() он и в африке GetSystemTime(). И ебал он в рот все эти таймзоны.
        Ответить
        • разница такая, что шансов налететь на устаревшую tz database в два раза больше

          если у тебя RTC по Зимбабве, а выводить тебе нужно по Уругваю, но ты зависишь от решений как зимбабвийского, так и уругвайского правительств

          А по-скольку tz database у тебя более чем один (один в linux, другой в java, третий в винде, хотя там вообще и не tz database) то можно поесть говна

          Ну кроме того есть дуалбут, да
          Ответить
          • Я ещё сладкого хлебушка принёс:
            1. У MySQL собственная база часовых поясов.
            2. У библиотеки ICU тоже собственная база.

            Так что после каждого нового решения партии и правительства приходится обновлять базу в Линуксе, базу в Java, базу в MySQL, все копии библиотеки ICU...
            Ответить
            • MySQL вроде обычную системную умеет конвертить и подсасывать.
              Ответить
            • > системную
              Ну, в винде, емнип, нету TZ database как класса. Т.е. перевести старые таймштампы тупо невозможно без своей базы. Вот все и лепят свою реализацию. Или я ошибаюсь?
              Ответить
              • В винде своя БД есть. Или ты хочешь юзать ее из своих прог?
                Ответить
                • > своя БД
                  Дык там только текущий часовой пояс. И нет истории их смены. Или я ошибаюсь?
                  Ответить
                  • Свой аналог tzdata там вроде есть. На кабре были две хорошие статьи про tzdata, но потом их снесли. Хабрачюдеса.
                    Ответить
                    • Можно как-то узнать, какой оффсет был в Новосибе 12 мая 2006 года? Или оно пиздит и всегда считает по текущему законодательству?
                      Ответить
                      • В той статье вроде писали что у мс есть свой аналог tzdata
                        Ответить
                        • Ну если верить iana.org, то только в 8.1 нормальную tzdata завезли (и то, походу, только для Win RT API).
                          Ответить
                          • Нейбу, не проверял, да и хз как это проверить.
                            Ответить

    Добавить комментарий