gpt4 book ai didi

c++ - 日期之间的差异(仅年份)

转载 作者:行者123 更新时间:2023-12-02 09:57:36 25 4
gpt4 key购买 nike

我想知道是否有任何简单和简短的方法来计算带有Boost的C++中两个日期之间经过了多少年?

例如(YYYY-MM-DD):

2005-01-01至2006-01-01是1年

2005-01-02至2006-01-01为0年

如果我假设使用这样的代码没有leap年,我可以很容易地计算出它:

boost::gregorian::date d1( 2005, 1, 1 );
boost::gregorian::date d2( 2006, 1, 1 );

boost::gregorian::date_duration d3 = d1 - d2;
std::cout << abs( d3.days() ) / 365;

但是使用这样的代码,由于2000是is年,因此我想将is年考虑在内,因此2000-01-02和2001-01-01之间的差为1年,应为0。

//编辑

我想将年份作为整数。我已经创建了这样的代码(我认为现在可以运行),但是如果有人比我更了解boost,我将不胜感激一些优雅的解决方案:
boost::gregorian::date d1( 2005, 4, 1 );
boost::gregorian::date d2( 2007, 3, 1 );

int _yearsCount = abs( d1.year() - d2.year() );

// I want to have d1 date earlier than d2
if( d2 < d1 ) {
boost::gregorian::date temp( d1 );
d1 = boost::gregorian::date( d2 );
d2 = temp;
}

// I assume now the d1 and d2 has the same year
// (the later one), 2007-04-01 and 2007-03-1
boost::gregorian::date d1_temp( d2.year(), d1.month(), d1.day() );
if( d2 < d1_temp )
--_yearsCount;

最佳答案

假设您想要整年数(0、1或更多),该如何做:

if (d1 > d2)
std::swap(d1, d2); // guarantee that d2 >= d1

boost::date_time::partial_date pd1(d1.day(), d1.month());
boost::date_time::partial_date pd2(d2.day(), d2.month());

int fullYearsInBetween = d2.year() - d1.year();
if (pd1 > pd2)
fullYearsInBetween -= 1;

虽然这基本上与您的算法相同(您在我撰写本文时编辑了帖子)。

关于c++ - 日期之间的差异(仅年份),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15508217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com