我想在我的代码中处理日期和时间,并且已经指向了boost库的方向 - 特别是boost :: locale :: date_time(部分原因是这允许我避免夏令时奇怪使我以前的实施困难)。boost :: locale :: date_time:如何从Boost C++中的date_time对象获取数据?
但是,我得到不一致的结果。当我在date_time对象中存储日期,然后尝试从中获取数据时,这是不正确的。这里有一个例子:
#include <boost\\asio\\error.hpp>
#include <boost\\locale.hpp>
using namespace std;
int main()
{
// Necessary to avoid bad_cast exception - system default should be fine
boost::locale::generator gen;
std::locale::global(gen(""));
// Create date_time of 12/19/2016
boost::locale::date_time dt = boost::locale::period::year(2016) + boost::locale::period::month(12) + boost::locale::period::day(19);
unsigned int month = dt.get(boost::locale::period::month());
unsigned int day = dt.get(boost::locale::period::day());
unsigned int year = dt.get(boost::locale::period::year());
cout << month << "/" << day << "/" << year << endl;
// Expected output: 12/19/2016
// Actual output: 0/19/2017
}
我在做什么错了?我只想提取已保存的日期,月份,年份,小时等。
谢谢。
编辑:这是可能的,我最初以不正确的方式设置date_time。假设我有整数(而不是字符串)格式的所有相关数据,是否有明确设置日期时间的更好方法(例如,至2016年12月19日)?
好了,你没有* *添加12个月的时间.... – Xirema
你有没有考虑[霍华德Hinnant(欣南特)的日期/时间库(https://howardhinnant.github.io/date/date.html )? 'static_assert(2016_y/12/19 + months {12} == 2017_y/12/19,“”);' –