Re: ISO week number
От: Faust Россия  
Дата: 05.07.04 13:44
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Помогите с формулой, пожалуйста. Весь день головой об стол стучу, что-то никак.


К>Дано: дата (день,месяц,год).


К>Номер недели по ISO — это число 1..53

К>неделя начинается с понедельника
К>первая неделя должна включать в себя первый четверг года
К>нулевая неделя — это 52 или 53 (т.е. относится к прошлому году)

К>Можно пользоваться WinAPI.



SYSTEMTIME    SystemTime1;
SYSTEMTIME    SystemTime2;
FILETIME    FileTime1;
FILETIME    FileTime2;
double        dNanoSec;
int            iDay;

// Получили текущее системное время
GetLocalTime(&SystemTime1); 
SystemTime2 = SystemTime1;
//Задали "1января текущего года"
SystemTime2.wMonth=1; SystemTime2.wDay=1;
SystemTime2.wHour=0; SystemTime2.wMinute=0; SystemTime2.wSecond=0;
//Опред.число Тик с 1601 года
SystemTimeToFileTime(&SystemTime1, &FileTime1);
SystemTimeToFileTime(&SystemTime2, &FileTime2);
//Получаем разницу в тиках 2-х дат
dNanoSec = static_cast<double> ((FileTime1.dwHighDateTime - FileTime2.dwHighDateTime) *
    0xFFFFFFFF + (FileTime1.dwLowDateTime - FileTime2.dwLowDateTime));
//Определяем текущий день года
iDay = (int) ((dNanoSec / ((double) 24 * 36000000000)) + 1);
Дальше считай сам...
Мой компьютер прогоняет бесконечный цикл за 9 секунд, но, мне кажется, он мог бы сделать это быстрее...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.