根据用户输入的天数计算生日

时间:2014-12-03 15:02:03

标签: c++ datetime ctime

你好我正试图通过使用用户输入的日期来计算一个人的生日。我对ctime库有点新意,但我想出的是获得天数的两个日期之间的差异。据我所知,我确实有ctime;我知道ctime有一个内置的struct tm,包括min,secs,hour,day,month和year。我尝试使用asctime将它们放在个人中,但这让我的逻辑更加混乱。我用difftime找到日期之间的差异。像这样:

struct tm a = { 0, 0, 0, 1, 1, 91 }; /* my birthday */
struct tm b = { 0, 0, 0, 3, 11, 114 }; /* today's date */
time_t x = mktime(&a);
time_t y = mktime(&b);
if (x != (time_t)(-1) && y != (time_t)(-1))
{
    double days = difftime(y, x) / (60 * 60 * 24);
    cout << ctime(&x);
    cout << ctime(&y);
    cout << "difference = " << days << " days" << endl;
}

输出为:differnce = 8706天

问题是用户输入8706天来获得生日或生日。如果有意义,这个代码反向。你能帮我弄清楚解决问题的逻辑吗?

2 个答案:

答案 0 :(得分:0)

我没有得到你真正想要的东西但是如果你试图让用户输入天数并且你将会得到他的生日很简单,那就写吧 struct tm a = {0,0,0,a,b,c}; /* 我的生日 */ 如果天数是8706 int c = 8706/365; //它应该给你的最大除数23 你会得到剩下的   int temp = 23 * 365 = 8395;  然后你会做 int remaining = 8706-8395 = 311;  你继续找到几个月和几天...... 希望这是你的问题。

答案 1 :(得分:0)

如果您可以使用Boost

#include <iostream>
#include "boost/date_time/gregorian/gregorian.hpp"

using namespace std;
using namespace boost::gregorian;

int main(){
    days d;
    cin >> d;
    date today = day_clock::local_day();
    date birth = today - d;
    date bday(today.year(), birth.month(), birth.day());
    if(bday < today) bday = date(today.year()+1, birth.month(), birth.day());
    cout << bday;
}