C ++检查日期比当前日期早6个月

时间:2020-03-30 08:42:58

标签: c++ date

因此,我有一个导师记录的列表,它保存了日期加入和日期终止。导师记录在6个月后终止后,该程序将自动删除。

因此,如何检查当前日期自终止日期以来已经有6个月或更久了。

我需要输入日期加入和终止日期。

3 个答案:

答案 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::

备注:

  • 与leap年一起工作。
  • 不需要关于如何进行日历计算的明确的底层知识。
  • 如果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,则可以继续执行删除辅导员功能。

相关问题