c - tm struct time.h 未规范化

标签 c time mktime time.h normalizing

我正在为我的 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 编译。

最佳答案

在您的代码中,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

关于c - tm struct time.h 未规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35402590/

相关文章:

java - 仅打印毫秒(0 到 999)

iOS 设备上的 ctime 无法正确测量时间

c - MK时间 : unexpected result

c - CentOS 上的 mktime() 有错误吗?

c - C 编程入门

c++ - 如何解决编译器警告 'implicit declaration of function memset'

c++ - 处理夏令时 - C++

c - mktime 返回错误的时间戳(关闭整整一个月)

c - 如何使 UDP 套接字在新消息到达时替换旧消息(尚未接收())?

c - 关于将 C 结构体指针传递给函数的问题?