0

構造体の時間 (時間、分、秒) メンバーに値を追加していますが、tm使用しているにもかかわらず更新/正規化されていませんmktime()。コードは次のとおりです。

struct tm timeStruct;
char buffer[80];

timeStruct.tm_year = 2016 - 1900;
timeStruct.tm_mon = 3;
timeStruct.tm_mday = 32;
timeStruct.tm_hour = 23;
timeStruct.tm_min = 59;
timeStruct.tm_sec = 59;
timeStruct.tm_isdst = -1;

printf( "Date before adding interval: \n");
mktime(&timeStruct);
strftime(buffer, sizeof(buffer), "%c", &timeStruct);
printf(buffer);

printf( "\nthe year is %d\n", timeStruct.tm_year );
printf( "the month is %d\n", timeStruct.tm_mon );
printf( "the day is %d\n", timeStruct.tm_mday );
printf( "the hours are %d\n", timeStruct.tm_hour );
printf( "the minutes are %d\n", timeStruct.tm_min );
printf( "the seconds are %d\n", timeStruct.tm_sec );

/*
 * Add intervals to time
 */
timeStruct.tm_sec += 2;
timeStruct.tm_min += 2;
timeStruct.tm_hour += 5;

printf( "Date after adding interval: \n");
strftime(buffer, sizeof(buffer), "%c", &timeStruct);
printf(buffer);

printf( "\nthe year is %d\n", timeStruct.tm_year );
printf( "the month is %d\n", timeStruct.tm_mon );
printf( "the day is %d\n", timeStruct.tm_mday );
printf( "the hours are %d\n", timeStruct.tm_hour );
printf( "the minutes are %d\n", timeStruct.tm_min );
printf( "the seconds are %d\n", timeStruct.tm_sec );

コンソール出力: 1

これは、コンソール出力の出力です。

Date before adding interval: 
Mon May  2 23:59:59 2016
the year is 116
the month is 4
the day is 2
the hours are 23
the minutes are 59
the seconds are 59
Date after adding interval: 
Mon May  2 28:61:61 2016
the year is 116
the month is 4
the day is 2
the hours are 28
the minutes are 61
the seconds are 61

Windows 7 マシンで Eclipse を使用し、Cygwin でコンパイルしています。

4

2 に答える 2

2

コードでmktime()は、間隔を追加する前にのみ呼び出されます。間隔を追加した後に呼び出す必要があります(更新されたを正規化できるようにするためtimeStruct):

printf( "Date after adding interval: \n");
mktime(&timeStruct);    // <--- here
strftime(buffer, sizeof(buffer), "%c", &timeStruct);

出力:

Tue May  3 05:02:01 2016
the year is 116
the month is 4
the day is 3
the hours are 5
the minutes are 2
the seconds are 1
于 2016-02-15T06:20:07.610 に答える