C++ 计算当前日期和用户输入日期之间的天数
该程序的主要目标是能够向用户询问日期,例如他们的生日,然后输出他们活了多少天 因此,我在这里遇到的主要问题是试图找出如何做到这一点,以便程序知道一个月和一年中有多少天 我向用户询问数字格式示例1 2000中的当前日期、月份和年份 现在,当你把betweenYear、betweenDay和betweenMonth的结果加起来,根据我输入的年份,它只给了我大约40天的时间,实际上应该是数千天。我知道这是因为当向用户询问这些信息时,程序不知道这些是实际日期,而只是数字。我不知道如何将用户信息转换成程序中的实际日期,而不是简单的整数 所以我的问题是:在仍然使用用户输入的数字的情况下,如何定义一个月的天数和一年的天数 我只输入了我认为必要的代码部分。我对这一点还很陌生,我已经做了很多研究,但没有成功地找到足够简单的例子让我理解C++ 计算当前日期和用户输入日期之间的天数,c++,C++,该程序的主要目标是能够向用户询问日期,例如他们的生日,然后输出他们活了多少天 因此,我在这里遇到的主要问题是试图找出如何做到这一点,以便程序知道一个月和一年中有多少天 我向用户询问数字格式示例1 2000中的当前日期、月份和年份 现在,当你把betweenYear、betweenDay和betweenMonth的结果加起来,根据我输入的年份,它只给了我大约40天的时间,实际上应该是数千天。我知道这是因为当向用户询问这些信息时,程序不知道这些是实际日期,而只是数字。我不知道如何将用户信息转换成程序
int main()
{
cout << "Please Enter the day you were born. (EX 1-31) ";
cin >> day;
cout << "Please Enter the month you were born. (EX 1-12) ";
cin >> month;
cout << "Please Enter the year you were born. (EX 1990)";
cin >> year;
time_t t = time(NULL);
tm* timePtr = localtime(&t);
betweenYear = (timePtr->tm_year + 1900) - year;
betweenDay = timePtr->tm_mday - day;
betweenMonth = timePtr->tm_mon - month;
你需要将年数扩展为天,也可以先扩展为月数,因此,通常只需将它们扩展为365*betweenYear,您必须为每个闰年添加额外的一天,例如365*betweenYear+betweenYear%4/4和几个月,尝试您的想法循环使用它们,并使用诸如days+=month\u number-month\u number的内容。我建议使用标准图书馆处理与时间有关的问题
#include <ctime>
using namespace std;
const long long SECONDS_PER_DAY = 3600L * 24L;
long long days_since(int year, int month, int day) {
// Current time since epoch
time_t now = time(nullptr);
// Convert year, month and day to a tm object
tm beg = *localtime(&now);
beg.tm_year = year - 1900;
beg.tm_mon = month - 1;
beg.tm_mday = day;
// difftime returns seconds
time_t bd = mktime(&beg);
return static_cast<long long>(difftime(now, bd))/SECONDS_PER_DAY;
}
您的代码有什么问题?@chbchb55在计算betweenYear、BetweenDay和betweenMonth的结果时。如果用户输入的日期是90年代初,那么它最多只有35天,而实际上应该是数千天。您需要将年份扩展为天以及月份,因此,通常只需将它们扩展为365*betweenYear,您必须为每个闰年添加额外的一天,例如365*betweenYear+betweenYear%4/4和类似的时间months@chbchb55这正是我想要的。我最初想乘以365,但我想结果会是一个疯狂的数字。但是现在知道了时间函数是如何工作的就完美了!非常感谢。我计划在“月份”部分中做的是通过一个while循环来确定用户输入的月份天数。显示您已解决问题的正确方法是添加一个显示您如何解决问题的答案。我相信,在48小时左右的时间里,你会回来接受你自己的答案——当然,除非那时你已经得到了一个更好的答案。如果你接受自己的答案,就不会得到2分奖励。仅仅在主题中加入“已解决”并不是正确的处理方法。你可以在问题中添加你的答案,但自我回答更合适,尤其是因为它可以结束问题——很明显,有答案。我在最后的代码中这样做了。我把我所有的库和名称空间的东西都从这里发布的代码中删除了,以缩短它。
#include <ctime>
using namespace std;
const long long SECONDS_PER_DAY = 3600L * 24L;
long long days_since(int year, int month, int day) {
// Current time since epoch
time_t now = time(nullptr);
// Convert year, month and day to a tm object
tm beg = *localtime(&now);
beg.tm_year = year - 1900;
beg.tm_mon = month - 1;
beg.tm_mday = day;
// difftime returns seconds
time_t bd = mktime(&beg);
return static_cast<long long>(difftime(now, bd))/SECONDS_PER_DAY;
}