2012-05-25 1 views
0

Boost의 boost :: gregorian :: from_ * string() 구문 분석 함수는 4 자리 연도 만 처리하는 것으로 보이며 2 자리 연도의 런타임 오류가 발생합니다.boost :: gregorian을 사용하여 C++에서 2 자리 연도를 구문 분석 할 수 있습니까?

boost :: gregorian :: from_ * string() 함수를 사용하여 2 자리 연도를 처리하는 가장 깨끗한 방법은 무엇입니까?

하나의 가능성은 날짜 형식을 위생 처리하기 위해 2000 또는 1900을 추가하는 프로그래밍 규칙과 함께 날짜 문자열을 사전 처리하는 것일 수 있습니다. 그러나 휠이 재발견되고 너무 많은 코드가 추가되는 것을 원하지 않습니다. 이렇게하는 더 좋은 방법.

답변

0

이 형식이 부스트에서 지원되는 것처럼 보이지 않습니다. 다행히도 구문 분석 날짜 형식은 한 줄짜리입니다. 아래는 AX로 작성된 파서입니다. Spirit에서 유사한 코드를 작성할 수 있습니다.

using namespace boost::gregorian; 
using namespace axe::shortcuts; 
unsigned year, month, day; 
auto date_rule = _uint >> year > '/' > _uint >> month > '/' > _uint >> day > _z; 
std::string date_string("99/01/22"); 
if(date_rule(date_string.begin(), date_string.end()).matched) 
{ 
    date d(year < 100 ? year + 1900 : year, month, day); 
    // etc. 
} 
+0

연도가 2 자리 인 경우 heh, year <100이 항상 true가 될 것이지만 나는 생각을 얻습니다 :-) – daj

0

Boost.DateTime는 – the docs 원하는 동작을 일치하는 %C 형식 플래그가 있다는 말을 그렇게 할 수는 없지만, 그것은 단지 출력, 입력하지에 사용하고, 플랫폼의도 만에 제한된 수 있습니다.

관련 문제