1. Си / Говнокод #17375

    +141

    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
    date = j / 86400l;
    t = j - (date * 86400l);
    date += 731000ul;
    y = (4 * date - 1) / 146097;
    d = (4 * date - 1 - 146097 * y) / 4;
    date = (4 * d + 3) / 1461;
    d = (4 * d + 7 - 1461 * date) / 4;
    m = (5 * d - 3) / 153;
    d = (5 * d + 2 - 153 * m) / 5;
    y = 100 * y + date;
    if (m < 10) {
        m += 3;
    } else {
        m -= 9;
        y++;
    }

    Voodoo magic...

    Запостил: bormand, 26 Декабря 2014

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

    • ColdFusion и даты?
      Ответить
    • классический же алгоритм
      в тред призывается 3.1415 и другие иррациональные числа
      Ответить
    • 86400 - кол-во секунд в дне -> date есть количество дней, j - время в секундах (UNIX?) с начала эпохи, t - время в секундах.
      из этого следует что 731000 это дни. приблизительно 2001.4 года.
      146097 похоже на количесто дней в 400х года.

      остально, честно говоря, смысла отдает мало.
      Ответить
    • http://ideone.com/KaHroy

      выдает 22.07.2046
      Ответить
      • Там просто эпоха нестандартная - с 2001-07-28 начинается. Если это смещение отнять - получится обычный никсовый таймштамп.

        http://ideone.com/bbe6kI
        http://ideone.com/9NcPRv
        Ответить
        • такой лаконичной реализации времени я еще не видел. надо букмаркнуть. а вдруг понадобится.
          Ответить
    • - Руслан, наверное, ты всё не так понял. Я не собираюсь ничего принимать и уж точно не собираюсь заканчивать свою жизнь таким образом...
      Ответить

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