Помогите решить проблему.
С помощью класса CTime получаю тек. дату (
ГГГГММДД) и все ОК.
CTime currentTime = CTime::GetCurrentTime();
YYYY = atoi(currentTime.Format("%#Y"));
MM = atoi(currentTime.Format("%#m"));
DD = atoi(currentTime.Format("%#d"));
WorkingDate = ((((YYYY * 100) + MM) * 100) + DD);
Но как мне получить предыдущую дату?
(для месяца и года это не проблема — можно просто отнять 1, но как быть с числом не знаю ведь в месяцах разное число дней, плюс еще и год может быть весокосный)
if (DD == 1)
{ if (MM == 1) // если текущий месяц = 1, то предыдущая дата = 31.12.(YYYY-1)
{ YYYY = YYYY - 1;
MM = 12;
DD = 31; } else { MM = MM - 1;
DD = ? ? ? ?; }
} else { DD = DD - 1; }
Может вообще есть какая-нить ф-ция или алгоритм ?
Заранее спасибо.
15.10.03 16:00: Перенесено модератором из 'C/C++' — ПК
Здравствуйте, alex-ikar, Вы писали:
AI>Помогите решить проблему.
AI>С помощью класса CTime получаю тек. дату (ГГГГММДД) и все ОК.
AI>AI>CTime currentTime = CTime::GetCurrentTime();
AI>YYYY = atoi(currentTime.Format("%#Y"));
AI>MM = atoi(currentTime.Format("%#m"));
AI>DD = atoi(currentTime.Format("%#d"));
AI>WorkingDate = ((((YYYY * 100) + MM) * 100) + DD);
AI>
AI>Но как мне получить предыдущую дату?
AI>(для месяца и года это не проблема — можно просто отнять 1, но как быть с числом не знаю ведь в месяцах разное число дней, плюс еще и год может быть весокосный)
AI>AI>if (DD == 1)
AI>{ if (MM == 1) // если текущий месяц = 1, то предыдущая дата = 31.12.(YYYY-1)
AI> { YYYY = YYYY - 1;
AI> MM = 12;
AI> DD = 31; } else { MM = MM - 1;
AI> DD = ? ? ? ?; }
AI>} else { DD = DD - 1; }
AI>
AI>Может вообще есть какая-нить ф-ция или алгоритм ?
AI>Заранее спасибо.
CTimeSpan oneDay(1, 0, 0, 0);
CTime current = CTime::GetCurrentTime();
CTime previous = current - span;
Здравствуйте, alex-ikar, Вы писали:
AI>Помогите решить проблему.
AI>С помощью класса CTime получаю тек. дату (ГГГГММДД) и все ОК.
AI>Но как мне получить предыдущую дату?
AI>(для месяца и года это не проблема — можно просто отнять 1, но как быть с числом не знаю ведь в месяцах разное число дней, плюс еще и год может быть весокосный)
AI>Может вообще есть какая-нить ф-ция или алгоритм ?
есть
вот маленький примерчик
CTime T1,T2;
T1 = CTime::GetCurrentTime();
// вот тут создаём временной интервал равный одному дню
CTimeSpan TS (1,0,0,0);
T2=T1-TS;
вот и всё
alex-ikar wrote:
[]
ai> Может вообще есть какая-нить ф-ция или алгоритм ?
Под win32 алгоритм может быть такой (дата представлена SYSTEMTIME):
Перевести дату из SYSTEMTIME в FILETIME (SystemTimeToFileTime())
Из/к полученному в п.1 вычесть/прибавить нужное количество времени выраженное в FILETIME.
Перевести полученное в п.2 FILETIME обратно в SYSTEMTIME (FileTimeToSystemTime()).
Если нужен портабельный способ — пользуй
Boost Date-Time Library.Posted via RSDN NNTP Server 1.7 "Bedlam"