我正在使用 boost 的日期对象我想从这个对象中获取年份作为字符串或 int
我没有找到简单的方法来做到这一点谢谢!罗恩
#include <boost/date_time/local_time/local_time.hpp>
#include <boost/lexical_cast.hpp>
#include <string>
std::string x = boost::lexical_cast<std::string>
(second_clock::local_time().date().year());
应该做。
我为我的一个项目编写了这些函数,您可能会发现它很有用。在我发现 lexical_cast 在我的特定代码中导致性能问题后,我就这样做了。(没有保证,尽管它在我们的产品环境中运行了几年;)
using namespace boost;
gregorian::date date_from_str(const char* dateStr,const char* format) {
int year;
int month;
int day;
sscanf_s(dateStr,format,&year,&month,&day);
return gregorian::date(year,month,day);
}
std::string date_to_str(const gregorian::date& date,const char* format) {
char buf[10];
gregorian::date::ymd_type ymd = date.year_month_day();
sprintf_s(buf,sizeof(buf),format,ymd.year,ymd.month,ymd.day);
return std::string(buf);
}
gregorian::date dateInt_to_date(int dateInt) {
const int day = dateInt % 100;
const int month = (dateInt / 100) % 100;
const int year = dateInt / 10000;
return gregorian::date(year,month,day);
}
您可以对其进行编辑以仅返回年份部分
一个不错的选择是使用 boost 库中的内置函数。
#include <iostream>
#include <string>
#include "boost/date_time/gregorian/gregorian.hpp" //include all types plus i/o
using namespace boost::gregorian;
using namespace std;
date d(2000, Jan, 1);
string a = to_simple_string(d);