请帮忙!尝试编写一个使用今天日期的程序
Please help! Trying to write a Program that uses today's date
对于 class,我的教授给了我们一个额外的学分分配,如果我们愿意,我们可以做。我在其中的一部分遇到了麻烦,因为她希望我们做一些我们在 class 中还没有学到的东西。问题是创建一个程序,让他们输入他们的生日,然后有一个函数可以显示他们已经过了多少天。我做了一些研究,发现我必须使用 time.h 的东西,我还需要将他们的生日转换为大纪元时间,然后从今天的大纪元时间中减去。我不太确定我的代码中的所有内容是如何工作的:(而且我不必担心闰日)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int month, day, year, AgeinDays;
printf("Enter birthday (mm): ");
scanf("%d", &month);
printf("Enter birthday (dd): ");
scanf("%d", &day);
printf("Enter birthday (yyyy): ");
scanf("%d", &year);
AgeinDays = calc_age(month, day, year);
printf("%d", AgeinDays);
}
int calc_age(int m, int d, int y) {
int DaysinMonth[12] = {31, 28, 31, 20, 31, 31, 31, 31, 30, 31, 30, 31};
struct tm t;
time_t t_of_day;
t.tm_year = //Need to subtract todays year form y
t.tm_mon = m;
t.tm_mday = d;
t.tm_isdst = -1;
t_of_day = mktime(&t);
printf("You are this many seconds old", (long) t_of_day);
}
不知道大家对unix time这个概念的熟悉程度。这是一个通过计算从1970年1月1日开始的秒数来描述时间点的系统。要获得从特定日期到现在的天数,您可以减去时间戳并将结果除以86400(=60 * 60 * 24).因此,您不必考虑闰年。如果你有 8000 天,你就是 8000 天。一年是5天还是365.25天都没关系
要继续您的解决方案 (time.h),您可以尝试这样的操作:
double calc_age(const unsigned int m, const unsigned int d, const unsigned int y) {
struct tm t = {0};
time_t t_of_day;
t.tm_year = y - 1900; // look at the documentation of struct tm
t.tm_mon = m - 1;
t.tm_mday = d;
t.tm_isdst = -1;
t_of_day = mktime(&t);
time_t now;
time(&now);
return round((difftime(now,t_of_day)/(60.0*60.0*24.0)));
}
请记住,您使用 mktime 的解决方案可能不适用于 1970 年之前的日期。并且您必须对其余代码进行一些调整(printf、foward decleration 等)最后注意:我的代码不是一个完美的解决方案也许你再考虑一下数据类型和舍入。
对于 class,我的教授给了我们一个额外的学分分配,如果我们愿意,我们可以做。我在其中的一部分遇到了麻烦,因为她希望我们做一些我们在 class 中还没有学到的东西。问题是创建一个程序,让他们输入他们的生日,然后有一个函数可以显示他们已经过了多少天。我做了一些研究,发现我必须使用 time.h 的东西,我还需要将他们的生日转换为大纪元时间,然后从今天的大纪元时间中减去。我不太确定我的代码中的所有内容是如何工作的:(而且我不必担心闰日)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int month, day, year, AgeinDays;
printf("Enter birthday (mm): ");
scanf("%d", &month);
printf("Enter birthday (dd): ");
scanf("%d", &day);
printf("Enter birthday (yyyy): ");
scanf("%d", &year);
AgeinDays = calc_age(month, day, year);
printf("%d", AgeinDays);
}
int calc_age(int m, int d, int y) {
int DaysinMonth[12] = {31, 28, 31, 20, 31, 31, 31, 31, 30, 31, 30, 31};
struct tm t;
time_t t_of_day;
t.tm_year = //Need to subtract todays year form y
t.tm_mon = m;
t.tm_mday = d;
t.tm_isdst = -1;
t_of_day = mktime(&t);
printf("You are this many seconds old", (long) t_of_day);
}
不知道大家对unix time这个概念的熟悉程度。这是一个通过计算从1970年1月1日开始的秒数来描述时间点的系统。要获得从特定日期到现在的天数,您可以减去时间戳并将结果除以86400(=60 * 60 * 24).因此,您不必考虑闰年。如果你有 8000 天,你就是 8000 天。一年是5天还是365.25天都没关系
要继续您的解决方案 (time.h),您可以尝试这样的操作:
double calc_age(const unsigned int m, const unsigned int d, const unsigned int y) {
struct tm t = {0};
time_t t_of_day;
t.tm_year = y - 1900; // look at the documentation of struct tm
t.tm_mon = m - 1;
t.tm_mday = d;
t.tm_isdst = -1;
t_of_day = mktime(&t);
time_t now;
time(&now);
return round((difftime(now,t_of_day)/(60.0*60.0*24.0)));
}
请记住,您使用 mktime 的解决方案可能不适用于 1970 年之前的日期。并且您必须对其余代码进行一些调整(printf、foward decleration 等)最后注意:我的代码不是一个完美的解决方案也许你再考虑一下数据类型和舍入。