Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用c++; 如何比较C++中的日期,将其构造成一个结构 它有一个日、月和年变量,即如何检查事件发生后30天是否已经过去,等等。我个人发现,在比较同一年的两个日期时,我使用一个数组将两个日期都转换为“天日期”,该数组保存一年中所有月份的天计数,然后将日期转换为天,并进行我需要的计算。有没有比较日期更简单的方法?_C++_Date - Fatal编程技术网

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

用c++; 如何比较C++中的日期,将其构造成一个结构 它有一个日、月和年变量,即如何检查事件发生后30天是否已经过去,等等。我个人发现,在比较同一年的两个日期时,我使用一个数组将两个日期都转换为“天日期”,该数组保存一年中所有月份的天计数,然后将日期转换为天,并进行我需要的计算。有没有比较日期更简单的方法?,c++,date,C++,Date,这里有一个非常好的1。它允许您拥有{year,month,day}结构(称为date::year\u month\u day),以及{count of days}结构(称为sys\u days)。它还允许在这两种结构之间进行简单高效的转换。当然还有比较运算符 整个库本质上是到日历类型的扩展 视频介绍可在此处找到: 下面详细说明了在{year,month,day}结构和{count of days}结构之间转换的底层算法: 以下是字段(year\u month\u day)和序列(sys\u

这里有一个非常好的1。它允许您拥有
{year,month,day}
结构(称为
date::year\u month\u day
),以及
{count of days}
结构(称为
sys\u days
)。它还允许在这两种结构之间进行简单高效的转换。当然还有比较运算符

整个库本质上是
到日历类型的扩展

视频介绍可在此处找到:

下面详细说明了在
{year,month,day}
结构和
{count of days}
结构之间转换的底层算法:

以下是字段(
year\u month\u day
)和序列(
sys\u 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");
}

以上示例代码只需要<代码>“日期”。“<代码>,没有其他C++源文件(没有安装)。也有可用的,但这确实需要一些安装


我是这个图书馆的主要作者。

这里有一个非常好的1。它允许您拥有
{year,month,day}
结构(称为
date::year\u month\u day
),以及
{count of days}
结构(称为
sys\u days
)。它还允许在这两种结构之间进行简单高效的转换。当然还有比较运算符

整个库本质上是
到日历类型的扩展

视频介绍可在此处找到:

下面详细说明了在
{year,month,day}
结构和
{count of days}
结构之间转换的底层算法:

以下是字段(
year\u month\u day
)和序列(
sys\u 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");
}

以上示例代码只需要<代码>“日期”。“<代码>,没有其他C++源文件(没有安装)。也有可用的,但这确实需要一些安装



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

正如您所描述的,标准C风格的例程可能会工作得最好:

下面是一个使用C风格编码的粗略示例

#include <ctime>

const int SECONDS_PER_DAY = 24 * 60 * 60;

tm day1;
memset( &day1, 0, sizeof(day1) );
day1.tm_year = 2016 - 1900; // tm_year is the years since 1900 
                            // so to represent 2016, the value is 116.
day1.tm_mon  = 0;
day1.tm_mday = 20;

time_t day1a = mktime( &day1 );

tm day2;
memset( &day2, 0, sizeof(day2) );
day1.tm_year = 2008 - 1900; 
day1.tm_mon  = 0;
day1.tm_mday = 20;

time_t day2a = mktime( &day2 );

double day_delta = difftime( day1, day2 ); // returns number of seconds
double days_past = (day_delta / SECONDS_PER_DAY)
#包括
const int SECONDS_/天=24*60*60;
tm第1天;
memset(&day1,0,sizeof(day1));
day1.tm_year=2016-1900;//tm_年是自1900年以来的年份
//因此,代表2016年,该值为116。
day1.tm_mon=0;
day1.tm_mday=20;
时间\u t day1a=mktime(&day1);
tm第2天;
memset(&day2,0,sizeof(day2));
day1.tm_year=2008-1900;
day1.tm_mon=0;
day1.tm_mday=20;
时间\u t day2a=mktime(&day2);
双日_delta=difftime(第1天,第2天);//返回秒数
过去的两天=(日增量/秒/天)
这是标准,在任何地方都适用


注意:POSIX标准将
时间定义为一个整体类型

对于您所描述的,标准C风格的例程可能最适合:

下面是一个使用C风格编码的粗略示例

#include <ctime>

const int SECONDS_PER_DAY = 24 * 60 * 60;

tm day1;
memset( &day1, 0, sizeof(day1) );
day1.tm_year = 2016 - 1900; // tm_year is the years since 1900 
                            // so to represent 2016, the value is 116.
day1.tm_mon  = 0;
day1.tm_mday = 20;

time_t day1a = mktime( &day1 );

tm day2;
memset( &day2, 0, sizeof(day2) );
day1.tm_year = 2008 - 1900; 
day1.tm_mon  = 0;
day1.tm_mday = 20;

time_t day2a = mktime( &day2 );

double day_delta = difftime( day1, day2 ); // returns number of seconds
double days_past = (day_delta / SECONDS_PER_DAY)
#包括
const int SECONDS_/天=24*60*60;
tm第1天;
memset(&day1,0,sizeof(day1));
day1.tm_year=2016-1900;//tm_年是自1900年以来的年份
//因此,代表2016年,该值为116。
day1.tm_mon=0;
day1.tm_mday=20;
时间\u t day1a=mktime(&day1);
tm第2天;
memset(&day2,0,sizeof(day2));
day1.tm_year=2008-1900;
day1.tm_mon=0;
day1.tm_mday=20;
时间\u t day2a=mktime(&day2);
双日_delta=difftime(第1天,第2天);//返回秒数
过去的两天=(日增量/秒/天)
这是标准,在任何地方都适用


注意:POSIX标准将时间定义为一个整数类型

如果您需要自己实现它,那么最简单的方法就是将日期保持为一个整数——正如您在文章中看到的,从月/日/年到朱利安日再到朱利安日的计算非常简单(当然从计算机的角度来看)。当你们把日期作为一个数字来计算天数的差异或者比较它们是很简单的。或者,如果您说它已经实现为一种结构,您可以将日期转换为动态的朱利安日(或者保留可变字段以缓存该值).

如果您需要自己实现它,那么最简单的方法就是将日期保持为单个整数-正如您在文章中看到的,从月/日/年到朱利安日以及从朱利安日再到朱利安日的计算非常简单(当然从计算机的角度来看)。当你们把日期作为一个数字来计算天数的差异或者比较它们是很简单的。或者,如果您说它已经实现为一种结构,您可以将日期转换为动态的朱利安日(或者保留可变字段以缓存该值)。

将非常有用如果您正在检查持续时间,那么除了转换为单个日期数外,没有其他好的选择。有多种标准可供选择,最流行的标准可能是自1970年1月1日以来经过的秒数。您可能希望查看可用库支持的内容。您使用的是哪个日期/时间库?你对解决方案做过任何研究吗?具体取决于推进日期。C++多年没有标准here@MarkRansom:如果您想要比“秒数”更好的东西,那么要使UNIX时间戳差异变得有用,您还有很多工作要做。如果你在检查持续时间,t