因此,我有一个导师记录的列表,它保存了日期加入和日期终止。导师记录在6个月后终止后,该程序将自动删除。
因此,如何检查当前日期自终止日期以来已经有6个月或更久了。
我需要输入日期加入和终止日期。
答案 0 :(得分:1)
c ++ 20概念代码
#include <chrono>
auto then = year_month_day(tutor.join);
auto current = year_month_day(time.now());
auto diff = current - then;
if (diff >= year_month_day(0,6,0))
delete_tutor(tutor);
答案 1 :(得分:1)
在C ++ 20之前,请使用日期/时间库,例如Howard Hinnant's free, open-source C++20 chrono preview library(可回溯到C ++ 11)。
#include "date/tz.h"
#include <chrono>
#include <iostream>
#include <list>
date::year_month_day
current_date()
{
using namespace date;
using namespace std::chrono;
zoned_time zt{current_zone(), system_clock::now()};
return year_month_day{floor<days>(zt.get_local_time())};
}
struct tutor_record
{
date::year_month_day joined;
date::year_month_day terminated;
};
void
trim(std::list<tutor_record>& records)
{
using namespace date;
auto limit = current_date() - months{6};
if (!limit.ok())
limit = limit.year()/limit.month()/last;
records.remove_if([limit](auto const& t) {return t.terminated <= limit;});
}
这将通过以下方式移植到C ++ 20:
#include "date/tz.h"
。using namespace date;
。date::
更改为std::chrono::
。备注:
如果UTC中的当前日期足够,则可以通过以下方式简化此程序:
使用仅标头的库"date/date.h"
,不需要使用时区。
return floor<days>(system_clock::now());
答案 2 :(得分:-1)
[INFO]不适用于LEAP YEAR [!]对于leap年,您可能需要计算多少leap年并将其添加到总天数中
可能您可以使用称为Rata Die的算法。 使用Rata die,用户可以按提供的日期计算总天数。 在下面查看代码。
int totalDays(int y, int m, int d)
{
if (m < 3)
y--, m += 12;
return 365 * y + y / 4 - y / 100 + y / 400 + (153 * m - 457) / 5 + d - 306;
}
int main()
{
int year = 2020;
int month =6;
int day =23;
cout << totalDays(year,month,day);
return 0;
}
您的输出将是:
737599
在您的情况下,您可以计算终止日期和当前日期的总天数,并将两者相减。终止电流之间的差必须小于等于180(6个月)。如果该值小于等于180,则可以继续执行删除辅导员功能。