gpt4 book ai didi

c++ - 获取 boost::gregorian::date 的整数表示

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:10 25 4
gpt4 key购买 nike

来自关于 boost::gregorian::date 类的 boost 文档 here :

"Internally boost::gregorian::date is stored as a 32 bit integer type"

现在这将是一个很好的、紧凑的方式,比如说,将这个日期存储在一个文件中。但是文档没有指定从对象中提取它的任何方法。

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

最佳答案

day_number() 成员函数返回这个。

boost::gregorian::date d(2014, 10, 18);
uint32_t number = d.day_number();

逆向可以实现:

gregorian_calendar::ymd_type ymd = gregorian_calendar::from_day_number(dn);
d = { ymd.year, ymd.month, ymd.day };

你当然可以使用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";
}

关于c++ - 获取 boost::gregorian::date 的整数表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26441559/

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