【问题标题】:Comparing dates in c++在 C++ 中比较日期
【发布时间】:2017-09-12 17:01:10
【问题描述】:

我是 C++ 的初学者,我一直在努力使用日期。我认为 ctime 库可能会有所帮助,但我不确定。

对于我的计划,我需要让某人输入他们加入俱乐部的日期,然后我需要将其与当前日期进行比较以计算出会员费。

我也不确定输入日期的最佳方式(例如,分别输入日/月/年还是一起作为字符串输入?)。

我找不到这样做的简单方法,非常感谢一些帮助。谢谢。

【问题讨论】:

  • 不要混淆日/月/年。在某个时间点之后使用秒。
  • 这会涉及什么命令?编辑:由于有些月份的长度不同,这也会起作用吗?
  • 我没有使用 2011 版本,所以我认为这不起作用 - 我尝试时出错。
  • 这个只有标题的日期库被提议用于标准化。 github.com/HowardHinnant/date

标签: c++


【解决方案1】:

您可以从用户那里获取日期并使用 strptime 将其解析为 tm 结构。

例如:

tm timeDate;
strptime(input_str.c_str(),"%Y-%m-%d %H:%M", &timeDate); // define date / time format convenient for you here; this is just an example

然后转换为time_t类型:

time_t time_input = mktime(&timeDate);

然后与另一个 time_t 进行比较(以相同的方式创建或通过获取当前系统时间或您需要的任何内容);

double timeDiff = difftime(time_input, other_time_t_value);

使用的资源:

time tutorial

similar question

related question

另一个选项可能是 Boost 日期时间库(我不记得自己使用过它,所以我不会做更多的推荐给你)推荐 here

给其他阅读此问题的人的说明:我相信的 OP 没有使用 C++11 或更高版本。如果你是,this answer 可能更适合你。

【讨论】:

  • 谢谢。我必须包括时间还是我可以找出日期的差异?
  • 我相信你可以只使用日期。只使用格式字符串中的日期元素。
  • 我假设我会让他们输入 Y、m 和 d 变量?这似乎很有用,谢谢。
  • 我链接的第二个资源以非常简单的格式给出了一个示例,其中只有一个日期。看起来不错,但我没试过。你可以:-)
【解决方案2】:

参考https://stackoverflow.com/a/997988/3989888

#include <ctime>
#include <iostream>
using namespace std;

int main() {
    time_t t = time(0);   // get time now
    struct tm * now = localtime( & t );
    cout << (now->tm_year + 1900) << ' ' 
         << (now->tm_mon + 1) << ' '
         <<  now->tm_mday
         << endl;

    cout<<"Enter Date YYYY MM DD"<<endl;
    int y,m,d;
    cin>>y;
    cin>>m;
    cin>>d;

    cout<<"Member since: "<<y-now->tm_year-1900<<" years "<<m-now->tm_mon-1<<" months "<<d-now->tm_mday<<" days "<<endl;

}

【讨论】:

  • 谢谢!这非常有帮助,但有没有办法对抗负面的月份/日子?也许我可以使用 if 语句并对它们进行排序(尽管我不知道如何处理不同长度的月份)。
【解决方案3】:

现在是认真的吗?请编写现代代码并使用。 std::chrono::duration.

有点像

#include <chrono>
#include <iostream>

int main() {
  auto long_ago =
    std::chrono::system_clock::time_point();
  std::chrono::duration<double> diff =
    std::chrono::system_clock::now() - long_ago;
  std::cout << "Seconds since Jan 1 1970: " << diff.count() << std::endl;
}

【讨论】:

  • #1:请尊重他人。 #2:OP 评论说他没有使用支持此功能的编译器。
猜你喜欢
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多