How to calculate a date one moth before from Current date?
-
Dear Friends, I need to display a date exact month before from current date. For Ex: todays date is 14-OCt-08.. then i should display 14-Sep-08. Can anybody please help me out with this? Thank u so much in advance Megha
-
Dear Friends, I need to display a date exact month before from current date. For Ex: todays date is 14-OCt-08.. then i should display 14-Sep-08. Can anybody please help me out with this? Thank u so much in advance Megha
megha_gharote wrote:
Can anybody please help me out with this?
What *exactly* is that you need help with? Tell what have you tried or thought of so far.
Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche .·´¯`·->Rajesh<-·´¯`·. [Microsoft MVP - Visual C++]
-
megha_gharote wrote:
Can anybody please help me out with this?
What *exactly* is that you need help with? Tell what have you tried or thought of so far.
Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche .·´¯`·->Rajesh<-·´¯`·. [Microsoft MVP - Visual C++]
This is what i did till now.. CTime currentTime=CTime::GetCurrentTime(); int nDay = currentTime.GetDay(); int nMonth = currentTime.GetMonth(); int nYear = currentTime.GetYear(); int nHour = currentTime.GetHour(); int nMin = currentTime.GetMinute(); int nSec = currentTime.GetSecond(); currentTime -= 2592000; ///30*24*60*60 (Seconds) nDay = currentTime.GetDay(); nMonth = currentTime.GetMonth(); nYear = currentTime.GetYear(); nHour = currentTime.GetHour(); nMin = currentTime.GetMinute(); nSec = currentTime.GetSecond(); But i dont want to calculate it like this. Can anybody suggest me soem other method?
-
Dear Friends, I need to display a date exact month before from current date. For Ex: todays date is 14-OCt-08.. then i should display 14-Sep-08. Can anybody please help me out with this? Thank u so much in advance Megha
I think the below code will do the trick, anyway verifying it is up to you :rolleyes: CTime today = CTime::GetCurrentTime();
CTime aMonthAgo;
CTimeSpan ts(today.GetDay(),0,0,0);
aMonthAgo = today - ts;
aMonthAgo += CTimeSpan( - aMonthAgo.GetDay() + today.GetDay(), 0, 0, 0);
[added #1] That was buggy, forget it :-O . Anyway are you aware that your requirement cannot be satisfied when current day is for instance March 31th? [/added #1] [added #2] Fixed code:CTime today = CTime::GetCurrentTime();
CTime aMonthAgo;
CTimeSpan ts( today.GetDay(), 0, 0, 0 );
aMonthAgo = today - ts;
int iSpan = aMonthAgo.GetDay() - today.GetDay();
if (iSpan > 0)
aMonthAgo -= CTimeSpan( iSpan, 0, 0, 0);:) This code sets
aMonthAgo
to: (1) a date having the same day (of month) of current date, but month equal to previous month, whenever such requirement can be satisfied. (2) Last day of previous month whenever the requirement (1) cannot be satisfied (for instance when input date is March 31th). :)If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]modified on Tuesday, October 14, 2008 6:48 AM
-
This is what i did till now.. CTime currentTime=CTime::GetCurrentTime(); int nDay = currentTime.GetDay(); int nMonth = currentTime.GetMonth(); int nYear = currentTime.GetYear(); int nHour = currentTime.GetHour(); int nMin = currentTime.GetMinute(); int nSec = currentTime.GetSecond(); currentTime -= 2592000; ///30*24*60*60 (Seconds) nDay = currentTime.GetDay(); nMonth = currentTime.GetMonth(); nYear = currentTime.GetYear(); nHour = currentTime.GetHour(); nMin = currentTime.GetMinute(); nSec = currentTime.GetSecond(); But i dont want to calculate it like this. Can anybody suggest me soem other method?
Try this instead:
SYSTEMTIME varTime;
GetSystemTime(&varTime);
varTime.wMonth--;After the third statement, the month would be decremented by one. Kinda obvious, but you asked for it. Add: Oops! I haven't taken account of the year January. But I think that you must be able to do it yourself now. :-\
Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche .·´¯`·->Rajesh<-·´¯`·. [Microsoft MVP - Visual C++]
-
Dear Friends, I need to display a date exact month before from current date. For Ex: todays date is 14-OCt-08.. then i should display 14-Sep-08. Can anybody please help me out with this? Thank u so much in advance Megha
SYSTEMTIME today, lastMonth; // get current time and make a duplicate of the information GetLocalTime(&today); memcpy(&lastMonth, &today, sizeof(SYSTEMTIME)); // as long as it's not january, 1 month ago is still in this year if (lastMonth.wMonth > 1) lastMonth.wMonth--; // set month to december of last year else { lastMonth.wMonth = 12; lastMonth.wYear--; }
-
SYSTEMTIME today, lastMonth; // get current time and make a duplicate of the information GetLocalTime(&today); memcpy(&lastMonth, &today, sizeof(SYSTEMTIME)); // as long as it's not january, 1 month ago is still in this year if (lastMonth.wMonth > 1) lastMonth.wMonth--; // set month to december of last year else { lastMonth.wMonth = 12; lastMonth.wYear--; }
enhzflep wrote:
// as long as it's not january,
My 5 for your attention to detail. I missed out on the case where the month could be January! :)
Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche .·´¯`·->Rajesh<-·´¯`·. [Microsoft MVP - Visual C++]
-
enhzflep wrote:
// as long as it's not january,
My 5 for your attention to detail. I missed out on the case where the month could be January! :)
Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche .·´¯`·->Rajesh<-·´¯`·. [Microsoft MVP - Visual C++]
-
Oh gee Raj, thanks.:rose: Quick question - do I lose thhose points for forgetting to consider the question: What is the date 1 month prior to the 30th of march?
That's a flaw of OP's requirements. The same applies to March 31th (and, for most years, 29th), May 31th,... :)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
Oh gee Raj, thanks.:rose: Quick question - do I lose thhose points for forgetting to consider the question: What is the date 1 month prior to the 30th of march?
As CPallini said. :)
Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche .·´¯`·->Rajesh<-·´¯`·. [Microsoft MVP - Visual C++]
-
Try this instead:
SYSTEMTIME varTime;
GetSystemTime(&varTime);
varTime.wMonth--;After the third statement, the month would be decremented by one. Kinda obvious, but you asked for it. Add: Oops! I haven't taken account of the year January. But I think that you must be able to do it yourself now. :-\
Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche .·´¯`·->Rajesh<-·´¯`·. [Microsoft MVP - Visual C++]
What about if you are on 30th or 31st of march? Or any other 31st where the moth before only 30 has? Won't it crash? :P EDIT: Question was already below, I should read all before posting :doh:
Regards. -------- M.D.V. ;) If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about? Help me to understand what I'm saying, and I'll explain it better to you “The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson Rating helpfull answers is nice, but saying thanks can be even nicer.
-
What about if you are on 30th or 31st of march? Or any other 31st where the moth before only 30 has? Won't it crash? :P EDIT: Question was already below, I should read all before posting :doh:
Regards. -------- M.D.V. ;) If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about? Help me to understand what I'm saying, and I'll explain it better to you “The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson Rating helpfull answers is nice, but saying thanks can be even nicer.
That was discussed two posts below here[^]. But that is an exercise that the OP must take care of. :)
Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche .·´¯`·->Rajesh<-·´¯`·. [Microsoft MVP - Visual C++]
-
What about if you are on 30th or 31st of march? Or any other 31st where the moth before only 30 has? Won't it crash? :P EDIT: Question was already below, I should read all before posting :doh:
Regards. -------- M.D.V. ;) If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about? Help me to understand what I'm saying, and I'll explain it better to you “The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson Rating helpfull answers is nice, but saying thanks can be even nicer.
Nelek wrote:
What about if you are on 30th or 31st of march? Or any other 31st where the moth before only 30 has? Won't it crash?
BTW, I forgot to mention it won't *Crash* anyways. SYSTEMTIME is just a structure and it can store the value you put into it. The trouble may come, only when a call to something like SetTime() is called with the new time structure after decrement has happened. :)
Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche .·´¯`·->Rajesh<-·´¯`·. [Microsoft MVP - Visual C++]
-
Dear Friends, I need to display a date exact month before from current date. For Ex: todays date is 14-OCt-08.. then i should display 14-Sep-08. Can anybody please help me out with this? Thank u so much in advance Megha
If the current date happens to be March 31st and the year is not a leap year, the most days you'd be off is 3. That said, once you subtract 1 from the current month (use the
%
operator so that it will wrap back around to December as needed), you may also need to subtract up to 3 days to have a valid date."Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch