2013-05-30 3 views
1

PostgreSQL 데이터베이스에서 타임 스탬프 필드를 읽었습니다.boost :: posix_time이 시간대를 인식하도록하려면 어떻게해야합니까?

my_timestamp TIMESTAMP WITH TIME ZONE DEFAULT NOW() 

데이터베이스에서 읽기, 나는이 같은 부스트 ​​타임 스탬프로 변환 :

boost::posix_time::ptime pt(boost::posix_time::time_from_string(str)); 

문제는 boost::posix_time::time_from_string()이 시간대를 무시 것으로 보인다 타임 스탬프 열이 정의된다. 예를 들어

:

database text string == "2013-05-30 00:27:04.8299-07" // note -07 timezone 
boost::posix_time::to_iso_extended_string(pt) == "2013-05-30T00:27:04.829900" 

I는 결과의 Ptime 개체 연산을 수행하는 시간을 정확하게 7시간 off이다. 시간대 정보를 잃지 않기 위해해야 ​​할 일이 있습니까?

답변

1

나는 당신이 시간대를 처리하는 boost :: local_date_time을 사용해야한다고 생각한다. 문서에 다음과 같은 예가 있습니다. http://www.boost.org/doc/libs/1_41_0/doc/html/date_time/examples.html#date_time.examples.seconds_since_epoch

EDIT : 부스트는 특정 형식으로 날짜 구문 분석을 지원합니다. http://www.boost.org/doc/libs/1_40_0/doc/html/date_time/date_time_io.html#date_time.format_flags

string inp("2013-05-30 00:27:04.8299-07"); 
string format("%Y-%m-%d %H:%M:%S%F%Q"); 
date d; 
d = parser.parse_date(inp, 
         format, 
         svp); 
// d == 2013-05-30 00:27:04.8299-07 
+0

나는 당신을 팔로우하지 않는다. 어떻게 시간대 정보가있는 텍스트 문자열을 boost :: local_date_time으로 변환합니까? 내가 문자열을 취하는 유일한 함수는 boost :: posix_time :: time_from_string()으로 시간대 정보를 버리는 것처럼 보입니다. –

+0

내 편집을 확인하십시오, pls –

+0

부스트 문서에서 가져온 부분을 볼 수는 있지만 어떻게 작동시키는 지 알 수는 없습니다. svp 매개 변수는 어디서 오는가? 부스트 (Boost)의 예제는이 구문 분석에 타임 스탬프가 아닌 날짜 만 표시합니다. –