2015-02-05 195 views
0

如何在同一時間從struct tm中減去一天,以確保新日期有效。如何從struct tm中減去一天但確保完整性?

例如,

struct tm time = {}; 

time.tm_year = year - 1900; 

time.tm_mon = month - 1; 

time.tm_mday = day; 

與日= 1,月= 9,和年= 2014

所以,如果我現在減去一天time.tm_mday = 0,這是無效的。
但我不能只將tm_mday設置爲31,並將月份減1,因爲我不知道運行時場景中上個月有多少天。

+5

不要嘗試這個自己編寫。使用這樣的std功能:http://stackoverflow.com/a/2344845/402169 – tenfour 2015-02-05 16:46:33

+0

非常感謝@tenfour – user2822838 2015-02-05 16:53:07

+0

雖然我同意@tenfour,你只需要檢查一天是否大於一,如果不是,然後減去1,並將該日設置爲上個月的最後一天。每個月的天數並不相同,而且事實上你也不得不考慮閏年,而走上這條路線要容易得多。 – mgrenier 2015-02-05 16:56:31

回答

0

我已經使用了這裏的代碼:Algorithm to add or subtract days from a date?正如@tenfour在上面評論中所建議的那樣。

在此處添加我的代碼,以便快速參考誰在尋找下一個。

struct tm time = {}; 

time.tm_year = year - 1900; 

time.tm_mon = month - 1; 

time.tm_mday = day; 


if(subtractDay) 
{ 

    AddDays(&time, -1); 
} 

...................

void AddDays(struct tm* dateAndTime, const int daysToAdd) const 
{ 
    const time_t oneDay = 24 * 60 * 60; 

    // Seconds since start of epoch --> 01/01/1970 at 00:00hrs 
    time_t date_seconds = mktime(dateAndTime) + (daysToAdd * oneDay); 

    *dateAndTime = *localtime(&date_seconds); 
}