【问题标题】:How to subtract two dates without using the date/time library c++如何在不使用日期/时间库 c++ 的情况下减去两个日期
【发布时间】:2022-10-02 21:30:41
【问题描述】:

我正在尝试制作一个 Coid-19 自我评估工具,并确定用户应该为该程序隔离多长时间,需要知道他们暴露的时间以及第二次注射的时间。

目前我有我想要的函数文件的样子,但问题是,如何从 2021 年 1 月 1 日减去存储的日期。我通过 const 引用传递函数中的值。

//Include proper libraries
#include <iostream>
#include <cstdlib>

using namespace std;

//Include header files
#include \"Date.h\"
#include \"CalcDays.h\"

//Define function to calculate the ammount of time between exposure and users second shot
int calcDays(const Date& constRefDate1, const Date& constRefDate2) {

    //Define local var
    int daysDiff1;
    int daysDiff2;

    //Calculate the difference between daysDiff and 1/1/2021
    daysDiff1 = constRefDate1 -  
    daysDiff2 = constRefDate2 - 

    //Return the difference between date exposed and date you have gotten the shot
    return abs(daysDiff1-daysDiff2);

}
  • 您是否尝试过覆盖Date 类的operator-
  • 根据CDC guidance,您还需要知道第二剂是哪种疫苗接种(mRNA 为 6 个月,强生为 2 个月)。也不清楚您的代码是否应该使用 abs(d1 - d2)。
  • 目前 Date 类仅用于存储用户输入并以 MM/DD/YYYY 格式输出给用户。我想我可以将 1/1/2021 存储到 Date 类中,然后尝试减去它们。不确定我需要什么附加功能。我确实看到了一个在 C++ 中减去字符串的函数。
  • @jarmod 我们的教授只要求我们找出第二张照片和用户曝光时间之间的时间。一旦我们知道他们已经或超过 14 天,我们就可以宣布他们已完全接种疫苗。否则,用户不是,并且必须每个 CDC 隔离 10 天,如果完全接种疫苗,则必须隔离 5 天。
  • subtract strings in C++ 什么?如果要减去日期,则必须减去日期,字符串函数在这里没用。您需要查看每个日期的年、月、日(按此顺序),然​​后进行相应的计算(总结每年的天数、每月的天数等)。这很容易,但并非微不足道,如果您坐下来思考一分钟,您将在任何人为您解决之前找到解决方案。

标签: c++


【解决方案1】:

好吧,由于您不能使用为此目的设计的任何库函数,因此您必须自己实现所需的功能。

由于您当前的函数旨在返回两个任意 Dates 之间的差值(以天为单位),因此我自己的偏好是按照 cs1349459 的建议将其称为 operator-,并将其放入 Date.h/cpp。有点像这样:

// Date.h

class Date {
    // Existing stuff...

public:    
    int daysSince01012021() const;
};

int operator-(Date const&, Date const&);
// Date.cpp

int Date::daysSince01012021() const
{
    // Compare our year/month/day with 2021/1/1 and return the 
    // difference in days
}

int operator-(Date const& lhs, Date const& rhs)
{
    return lhs.daysSince01012021() - rhs.daysSince01012021();
}

这只是我的偏好,因为它松散地模仿了std::chrono 类的接口。如果您有其他准则要遵循,那也没关系。

至于应该进入这个daysSince01012021 函数的实际代码,Andrei Vukolov 提到的问题确实有你可以研究的“手动”算法的答案。我可能会想出一个,但就像你一样,我必须确定它应该有多健壮(它应该考虑到 2021 年 1 月 1 日和闰年之前的日期吗?),以及测试我的代码,因为它会可能对“off by one”错误很敏感。我不想让你失去那种体验! ;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    相关资源
    最近更新 更多