入力日を次の暦日に進めるために、次のコードを記述しました。これは、g++4.1.2でコンパイルされたダミーのソースファイルでテストした場合にうまく機能します。
ただし、私の会社のシミュレーター内から次のコードを実行すると(現時点では詳細はわかりません)、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);
}