c++ - 在 C++ 中比较日期的方法是什么

标签 c++ date

在 C++ 中比较结构中日期的最佳方法是什么 它有日、月和年变量,即如何检查事件发生后 30 天已经过去等等。我个人发现,在比较同一年的 2 个日期时,我使用一个数组将两个日期都设为“days-dates”,该数组保存一年中所有月份的天数,然后将日期转换为天数并进行我需要的计算.有没有更简单的方法来比较日期?

最佳答案

这是一个很好的C++11/14 library for handling dates 1。它可以让你拥有 {year, month, day}结构(称为 date::year_month_day )和 {count-of-days}结构(称为 sys_days )。它还允许在这两种结构之间进行简单高效的转换。自然还有比较运算符。

整个库本质上是 <chrono> 的扩展进入日历类型。

视频介绍在这里:

https://www.youtube.com/watch?v=tzyGjOm8AKo

Lots of example code here .

这里详细解释了 {year, month, day} 之间转换的底层算法。结构和 {count-of-days}结构:

http://howardhinnant.github.io/date_algorithms.html

以下是字段 (year_month_day) 和序列 (sys_days) 数据结构的一些日期创建和比较示例:

#include "date.h"

int
main()
{
    using namespace date::literals;

    // create and compare {year, month, day} structures
    constexpr auto ymd1 = 2017_y/jan/21;
    constexpr auto ymd2 = ymd1 + date::months{15};
    static_assert(ymd2 > ymd1, "ymd2 is 15 months after ymd1");
    static_assert(ymd2 == 2018_y/apr/21, "ymd2 is 2018-04-21");

    // create and compare {count_of_days} structures
    constexpr date::sys_days sd2 = ymd2;
    static_assert(sd2 == ymd2, "sd2 is the same day as ymd2");
    static_assert(sd2.time_since_epoch().count() == 17642, "sd2 is day 17642");
    constexpr date::sys_days sd1 = sd2 - date::days{465};
    static_assert(sd1 < sd2, "sd1 is 465 days before sd2");
    static_assert(sd1.time_since_epoch().count() == 17177, "sd1 is day 17177");
    static_assert(sd1 == 2017_y/jan/11, "sd1 is 2017-01-11");
}

constexpr/static_assert需要完全符合 C++14 的编译器。对于 C++11,删除 constexpr并更改 static_assertassert (并删除 static_assert 消息)。

date::sys_dayschrono::time_point 的类型定义:

time_point<system_clock, duration<int, ratio<86400>>

上面的示例代码只需要"date.h" ,并且没有其他 C++ 源文件(无需安装)。还有一个 timezone library at this same github location ,但这确实需要一些安装。


1 我是这个库的主要作者。

关于c++ - 在 C++ 中比较日期的方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41767430/

相关文章:

java - 对链表方法内的日期进行排序

c++ - 是否可以同时抛出两个值?

C++ 错误 : expected identifier before "(" token

c++ - 是否可以在不向函数传递参数的情况下获取函数的返回类型?

c++ - 将范围拆分为统一的间隔

javascript - 格式 - undefined 不是 Date 对象的函数

python - 在 Python 中将日期时间列表转换为日期

c++ - vector 内存分配策略

python - 连接年份和季度的新变量

javascript - 在 Angular js过滤器中格式化时间