获取 boost::gregorian::date 的整数表示

Cás*_*nan 5 c++ boost date

从类boost ::公历日期:: Boost文档在这里

“内部 boost::gregorian::date 存储为 32 位整数类型”

现在这将是一种不错的紧凑方式,例如,将此日期存储在文件中。但是文档没有指定从对象中提取它的任何方法。

问题是:有没有办法获得这个整数表示,以便以后构造同一个类的另一个相等的对象?

seh*_*ehe 5

成员day_number()函数返回 this。

boost::gregorian::date d(2014, 10, 18);
uint32_t number = d.day_number();
Run Code Online (Sandbox Code Playgroud)

反之可得:

gregorian_calendar::ymd_type ymd = gregorian_calendar::from_day_number(dn);
d = { ymd.year, ymd.month, ymd.day };
Run Code Online (Sandbox Code Playgroud)

你当然可以使用Boost Serialization来序列化,它会使用最紧凑的表示。请参阅http://www.boost.org/doc/libs/1_56_0/doc/html/date_time/serialization.html

查看完整演示:Live On Coliru

#include <boost/date_time/gregorian/greg_date.hpp>
#include <boost/date_time/gregorian/gregorian_io.hpp>
#include <iostream>

using namespace boost::gregorian;

int main()
{
    date d(2014, 10, 17);
    static_assert(sizeof(d) == sizeof(int32_t), "truth");

    std::cout << d << "\n";

    uint32_t dn = d.day_number();
    dn += 1;

    gregorian_calendar::ymd_type ymd = gregorian_calendar::from_day_number(dn);
    d = { ymd.year, ymd.month, ymd.day };
    std::cout << d << "\n";
}
Run Code Online (Sandbox Code Playgroud)