【问题标题】:Difference between two dates C language两个日期之间的差异C语言
【发布时间】:2020-07-30 15:01:44
【问题描述】:

!!已编辑

以下是一个不同的尝试,我有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 课做一个项目。 我们有一个问题,我们需要从结构中获取日期之间的差异。 我制作的功能有效,但仅在我的 Mac 上,在 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);
}


【问题讨论】:

  • 另外:ts = *localtime(&amp;rawtime); - * 是有意的吗?
  • 确保月份和年份正确,查看它们在struct tm 中的存储方式。此外,您应该使用time_t 作为传递给localtime 的值,并且difftime 返回double。请注意编译器警告,并阅读您正在使用的函数和结构。不要猜测。
  • @RobertS 是。
  • @WeatherVane 为什么?我只能找到没有* 的用途,f.e. struct tm * timeinfo; time_t rawtime; time (&amp;rawtime); timeinfo = localtime (&amp;rawtime);
  • @RobertS 因为localtime 返回一个指针,而不是struct

标签: c windows macos compatibility


【解决方案1】:

初始化变量

struct tm start = {0};

tm_mdaytm_montm_year 不是 struct tm 中的唯一字段。

【讨论】:

    猜你喜欢
    • 2013-10-02
    • 2011-10-29
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 2014-02-12
    • 2015-09-14
    相关资源
    最近更新 更多