C程序time_t和struct tm,结果相同?

时间:2013-05-10 09:36:30

标签: c mktime

我是C程序的新手,当我使用mktime函数编写程序时遇到了一些问题。

我宣布2次,第一次是系统时间,第二次是前一天,这是我的代码:

struct tm *now = calloc(1,sizeof(struct tm));
struct tm *dayb4 = calloc(1,sizeof(struct tm));
time_t t1 = time(NULL);

now = localtime(&t1);
dayb4 = localtime(&t1);

dayb4->tm_day -= 1;
mktime(dayb4);

但是,我发现时间“现在”和“dayb4”是相同的,这是当前时间的前一天... 谁能告诉我哪个部分出错?

非常感谢!!!

2 个答案:

答案 0 :(得分:1)

当您更新localtime()返回值时出现问题,您需要使用localtime_r()

struct tm *localtime(const time_t *timep);

localtime()的返回值指向静态分配的结构,该结构可能被后续调用任何日期和时间函数覆盖。

struct tm *localtime_r(const time_t *timep, struct tm *result);

localtime_r()将数据存储在用户提供的结构中。

在您的示例中,它应该类似于:

dayb4 = localtime_r(&t1, dayb4);

答案 1 :(得分:1)

您可以执行以下操作,而不是calloc和重叠结构:

struct tm now;
struct tm dayb4;
time_t t1 = time(NULL);

now = *localtime(&t1);
dayb4 = *localtime(&t1);

dayb4.tm_day -= 1;
mktime(&dayb4);