【问题标题】:Subtracting months/years from boost::posix_time::ptime从 boost::posix_time::ptime 中减去月/年
【发布时间】:2010-03-21 15:14:57
【问题描述】:

我有一个boost::posix_time::ptime 指向March 31st 2010,如下所示:

ptime p(date(2010, Mar, 31));

我想从这个日期减去一个月(可能还有几年)。从文档中,我看到了这两个运算符:ptime operator-(time_duration)ptime operator-(days),但它们都不能使用数月/数年。如果我尝试这样做:

time_duration duration = hours(24 * 30);
ptime pp = p - duration;

我将在 3 月 1 日到达,如果我正在尝试:

ptime pp = p - days(30);

我仍然希望获得 3 月 1 日,而我希望获得 2 月 28 日。
我怎样才能达到我想要的结果? (从 3 月 28 日、29 日、30 日减去一个月,我也想得到想要的结果)

【问题讨论】:

    标签: c++ datetime boost


    【解决方案1】:

    boost::posix_time::ptime::date() 运算符返回日期对象。您可以为此对象调用 greg_year、greg_month 等。

    【讨论】:

    • 谢谢,您的建议使我找到了解决方案。使用boost::gregorian::date 类,我能够找到“日期持续时间”,有几周/几个月/几年。
    【解决方案2】:

    嗯,我猜你已经知道并不是所有的月份都有 30 天,所以一般来说你不能减去 30 天。

    你应该问问自己“减去一个月”是什么意思。

    【讨论】:

    • 我已经在我的问题中说过我对“减去一个月”的解释,据我所知这是标准解释。
    • 那么从 2 月 5 日减去一个月,你的意思是 1 月 5 日?从 3 月 30 日减去 1 个月,是指 2 月 30 日,还是……?对不起,我不知道减去一个月的标准解释。那到底是什么标准解释?
    • 从 3 月 30 日减去一个月将得到 2 月 28 日或 2 月 29 日,具体取决于年份。我可以将您推荐给boost.org/doc/libs/1_35_0/doc/html/date_time/…,他们在其中解释了这种行为,起初可能看起来有些“尴尬”,但这是您所期望的
    猜你喜欢
    • 2014-08-03
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多