我編寫了以下代碼片段以將輸入日期提前到下一個日曆日期。當在用g ++編譯的虛擬源代碼文件中測試時,此方法運行良好。4.1.2使用ctime提前指定日期到下一個日曆日期的問題
但是,當從我公司的模擬器(其中錯綜複雜的細節在此處不可用)中運行以下代碼時,它會在20021027 ;即20021027以外的日期,它按預期工作,但是對於20021027,它本身返回20021027。
請告知可能會出現什麼問題?
int nextday(const int &date, int n=1)
{
struct tm curr_time;
int yyyy = curr_time.tm_year = date/10000-1900;
int mm = curr_time.tm_mon=(date/100)%100-1;
int dd = curr_time.tm_mday=date%100;
curr_time.tm_min=0;
curr_time.tm_sec=0;
curr_time.tm_hour=0;
time_t next = mktime(&curr_time) + 24*60*60*n;
struct tm new_time;
localtime_r(&next,&new_time);
yyyy = 1900 + new_time.tm_year;
mm = 1 + new_time.tm_mon;
dd = new_time.tm_mday;
return (10000*yyyy+100*mm+dd);
}
謝謝你的這段代碼。這確實有效,結果是夏令時導致了這個問題。 原來DST在美國結束20021027!因此,這會將時間推回一小時,導致代碼指向相同的日期(因爲我使用的是00:00:00引用) 通過設置tm_isdst = 0(標準時間)或使用tm_hour = 12,這個問題得到解決 – Mindstorm
對我沒有意識到這一點我感到羞恥,我經常這樣做,我只是自動使用中午,即使沒有考慮原因。 –