четверг, 31 мая 2012 г.

Определить день недели по дате C / C++

Всем привет,
Сегодня хорошее настроение по программировать ночью. (Играюсь тестовым заданием на вакансию в Binary Studio) Наткнулся на нераскрытую тему сисек  православного определения дня недели по дате.

Гугл до 3й страницы предлагает страшные велосипеды основанные на:
  1. Формуле Зеллера (сегодня впервые узнал о ней) тыц
  2. Win API пары функций:
    SystemTimeToFileTime(&st, &ft);
    FileTimeToSystemTime(&ft, &st);
  3.  предлагали использовать SQL запрос :) 
В тоже время красивое и кроссплатформенное решение достигается использованием пары функций gmtime() для UTC времени и localtime() для локального времени. Вывод текущего дня недели будет таким:
 
char * weekday[] = { "Sun", "Mon", "Tue", "We", "Thu", "Fri", "Sat"};

    // текущее время в UTC:
    time_t currentTime( ::time( NULL ) );

    // Определение дня недели и дня года:
    struct tm * ptm;
    ptm = ( localtime( &currentTime ) );
    // Вывод
    std::cout << weekday[ptm->tm_wday] << std::endl;

Вот так все просто решается :) Надеюсь кому нибудь пригодится.
Первое сообщение, оно же и тестовое. Интересно проверить что здесь и как работает. Куда щелкать и тд.