Я пытаюсь обработать дату и время в своем коде, и меня указали в направлении библиотеки повышения, в частности, boost :: locale :: 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
}
Что я делаю неправильно? Я просто хочу извлечь сохраненные дни, месяцы, годы, часы и т. Д.
Спасибо.
РЕДАКТИРОВАТЬ: Возможно, я изначально устанавливаю дату и время в неправильной манере. Есть ли лучший способ явно установить дату (например, 12-19-2016), предполагая, что у меня есть все соответствующие данные в целочисленном (не строковом) формате?
2016-04-05
+ 12 months
знак равно 2017-04-05
, Это имеет смысл, поскольку 12 месяцев — это целый год.
Вместо этого попробуйте добавить 11 месяцев, а затем увеличить, чтобы скорректировать месяц с 0 до 1.
boost::locale::date_time dt = boost::locale::period::year(2016) + boost::locale::period::month(11) + boost::locale::period::day(19);
uint month = dt.get(boost::locale::period::month()) + 1;
uint day = dt.get(boost::locale::period::day());
uint year = dt.get(boost::locale::period::year());
cout << month << "/" << day << "/" << year << endl;
Других решений пока нет …