我编写了以下代码片段以将输入日期提前到下一个日历日期。当在用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
对我没有意识到这一点我感到羞耻,我经常这样做,我只是自动使用中午,即使没有考虑原因。 –