【发布时间】: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(®ion[i].hospital[j].sickregion[k].end),
mktime(®ion[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(&rawtime);-*是有意的吗? -
确保月份和年份正确,查看它们在
struct tm中的存储方式。此外,您应该使用time_t作为传递给localtime的值,并且difftime返回double。请注意编译器警告,并阅读您正在使用的函数和结构。不要猜测。 -
@RobertS 是。
-
@WeatherVane 为什么?我只能找到没有
*的用途,f.e.struct tm * timeinfo; time_t rawtime; time (&rawtime); timeinfo = localtime (&rawtime); -
@RobertS 因为localtime 返回一个指针,而不是
struct。
标签: c windows macos compatibility