Разница между двумя датами C язык - PullRequest
0 голосов
/ 17 апреля 2020

!! Отредактировано

Ниже приведена другая попытка, у меня в результате rawtime, так что всего несколько секунд, и мне нужно преобразовать количество дней, вероятно, выполнив rawtime / 86400. Но даже с этим кодом windows всегда дает 0 в качестве результата, и xcode работает правильно.

typedef struct {
    char firstName[20];
    char lastName[20];
    char fiscalCode[17];
    STATESICK stateSick;
    struct tm start;
    struct tm end;
} SICKREGION;

    { "PlutoPluto", "Leonardi", "GRSBDT06B48F839T", stayHome, { 0, 0, 0, 28, 2, 2020 }, { 0, 0, 0, 29, 2, 2020 }},

void timeDiff() {
    double rawtime = 0;
    int i = 0;
    int k = 0;
    int j = 0;
    for (i = 0; i < 1; i++) {
        for (j = 0; j < 1; j++) {
            for (k = 0; k < 1; k++) {
                rawtime = difftime(mktime(&region[i].hospital[j].sickregion[k].end),
                                   mktime(&region[i].hospital[j].sickregion[k].start));
            }
        }
    }
    printf("%g\n", rawtime);
}

Я работаю над проектом для моего C класса с моими коллегами. У нас есть проблема, нам нужно получить разницу между датами, взятыми из структур. Функция, которую я сделал , работает, но только на моей маме c, на Windows не работает. , у нас есть 0 как результат, в любое время. кто-нибудь знает почему? Спасибо, Серхио.

Вот код:

void timeDiff() {
    struct tm ts;
    char buf[80];
    long rawtime = 0;
    int i = 0;
    int k = 0;
    int j = 0;
    for (i = 0; i < 1; i++) {
        for (j = 0; j < 1; j++) {
            for (k = 0; k < 3; k++) {
                struct tm end;
                end.tm_mday = region[i].hospital[j].sickregion[k].dateHealing.day;
                end.tm_mon = region[i].hospital[j].sickregion[k].dateHealing.month;
                end.tm_year = region[i].hospital[j].sickregion[k].dateHealing.year;

                struct tm start;
                start.tm_mday = region[i].hospital[j].sickregion[k].dateDiagnosis.day;
                start.tm_mon = region[i].hospital[j].sickregion[k].dateDiagnosis.month;
                start.tm_year = region[i].hospital[j].sickregion[k].dateDiagnosis.year;

                rawtime = difftime(mktime(&end), mktime(&start)) ;

                ts = *localtime(&rawtime);
            }
        }
    }
    strftime(buf, sizeof(buf), "%j", &ts);
    printf("%s\n", buf);
}


1 Ответ

1 голос
/ 17 апреля 2020

Инициализируйте ваши переменные

struct tm start = {0};

tm_mday, tm_mon и tm_year - не единственные поля в структуре tm.

...