首页 > 解决方案 > 如何在C中比较两个没有秒的日期

问题描述

我想比较两个日期,一个在当前日期时间,一个在列表中。如果这些日期具有相同的年、月和日,我在列表中的旧日期中添加一个值:如果不是,我在列表中创建一个新元素。

struct entry{
time_t date;
int quantity;
struct entry* next;
};

我调用find_list, 来查找和比较当前日期和记忆的日期

    int find_list(struct entry* head, time_t data, int quantita){

    struct tm* data_value, *data_list;  
    struct entry* pointer = head;
    time(&data);    
    data_value = gmtime(&data); 

    while(pointer){     
        data_list = gmtime(&pointer->date);
        //printf("Tempo value:%s\nTempo lista: %s\n", asctime(data_value), asctime(data_list));
        if(data_value->tm_year == data_list->tm_year && .....){
            pointer->quantity += quantita;
            return 1; 
        }
        pointer = pointer->next;        
    }
    return 0;   
};

但如果我 printf 两个值,我打印等于值

标签: c

解决方案


gmtime()返回一个指针。连续调用gmtime()(都返回一个指针)可能会返回一个指向同一内存的指针。

复制指向真实对象的内存。

struct tm data_list;                 // not a pointer!
data_list = *gmtime(&pointer->data); // copy value

注意:引入了 POSIX gmtime_r(),其行为与预期一致。

// for POSIX systems
struct tm data_list;                  // still not a pointer
gmtime_r(&pointer->data, &data_list);

推荐阅读