Как получить предыдущую дату?
От: alex-ikar Россия  
Дата: 15.10.03 09:58
Оценка:
Помогите решить проблему.

С помощью класса 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++' — ПК
Re: Как получить предыдущую дату?
От: Resnick Россия  
Дата: 15.10.03 10:06
Оценка:
Здравствуйте, 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;
Re: Как получить предыдущую дату?
От: Dimka Россия  
Дата: 15.10.03 10:08
Оценка:
Здравствуйте, alex-ikar, Вы писали:

AI>Помогите решить проблему.


AI>С помощью класса CTime получаю тек. дату (ГГГГММДД) и все ОК.


AI>Но как мне получить предыдущую дату?

AI>(для месяца и года это не проблема — можно просто отнять 1, но как быть с числом не знаю ведь в месяцах разное число дней, плюс еще и год может быть весокосный)


AI>Может вообще есть какая-нить ф-ция или алгоритм ?


есть
вот маленький примерчик


CTime T1,T2;
T1 = CTime::GetCurrentTime();
// вот тут создаём временной интервал равный одному дню
CTimeSpan TS (1,0,0,0);
T2=T1-TS;


вот и всё
- нельзя впихать невпихуемое :)
Re: Как получить предыдущую дату?
От: MaximE Великобритания  
Дата: 15.10.03 10:23
Оценка:
alex-ikar wrote:

[]

ai> Может вообще есть какая-нить ф-ция или алгоритм ?


Под win32 алгоритм может быть такой (дата представлена SYSTEMTIME):

  1. Перевести дату из SYSTEMTIME в FILETIME (SystemTimeToFileTime())
  2. Из/к полученному в п.1 вычесть/прибавить нужное количество времени выраженное в FILETIME.
  3. Перевести полученное в п.2 FILETIME обратно в SYSTEMTIME (FileTimeToSystemTime()).

Если нужен портабельный способ — пользуй Boost Date-Time Library.
Posted via RSDN NNTP Server 1.7 "Bedlam"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.