2010-08-05 3 views
4
, 난 다음 유용한 방법

날짜/시간 C++에서 파싱

에게

1) strptime()를 발견

, % m 등은 1 자 또는 2자를 가질 수 있습니다. 함수가이를 처리합니다. 이 결과 두 개의 변환 지정자 사이에 구분 기호를 사용하도록 강요합니다. 예 : % d % m에게 부여하는 것은 유효하지 않습니다. 이는 % d/% m 또는 다른 구분 기호에 대한 것입니다. 또한 이것은 시간대를 지원하지 않습니다.

2) 부스트 날짜 IO - 여기서 % d, % m은 2자를 가져야합니다. 자, 내가 얻은 입력 문자열은 이것을 가질 수 없다. 결과적으로이를 성공적으로 사용할 수 없습니다. 그러나 이것은 시간대를 지원하는 것으로 보이지만 확실하지는 않습니다. 그것이 입력을 위해 말하기 때문에 그것은 시간대를 지원합니까

그래서 나는 날짜를 결정하기 위해 둘 다 함께 사용할 것을 계획하고 있습니다. 그러나 나는 시간대를 고려할 수있는 곳을 원합니다. 그러나 아무도 그걸지지하지 않는 것 같습니다.

아무도 제안하지 않았습니까?

답변

3

@AJ는 : 코드가

#include <stdio.h> 
#include <sys/time.h> 
#include <time.h> 

int 
main(void) 
{ 
     struct tm tm[1] = {{0}}; 

     strptime("Tue, 19 Feb 2008 20:47:53 +0530", "%a, %d %b %Y %H:%M:%S %z", tm); 
     fprintf(stdout, "off %ld\n", tm->tm_gmtoff); 
     return 0; 
} 

포맷됩니다, 그래서 다른 대답을 추가 그리고 실행은 (glibc는 2.10.1)과 같습니다 나 다음 날짜로 변환하는

[email protected]:pts/28:~/temp> ./test 
off 19800 
+0

고마워! 궁금한 점이 glibc 2.9.x에서 가능합니까?! 그렇지 않은지 알고 있습니까? 은 아무렇게나 시도 할 것이지만 현재 Linux 머신에 액세스 할 수 없습니다. – AMM

+0

2.9에서도 작동합니다. – hroptatyr

+0

시간대가 CST CDT 등과 같은 3 글자 형식 일 때이 구문을 분석합니까? – AMM

0

는 libc의 버전에 따라 다릅니다 RGDS, AJ, 내가 말하고 싶지만, 물론 당신은 '고려'가 무엇을 의미 :이 추가 정보를 읽은 다음 그것을 무시하는데, 그것은하도록되어 구문 분석 된 정보를 tm 구조체에 저장하거나 시스템/환경 시간으로 변환하기위한 것인가? 당신이 strptime하지 않습니다 직접 지원 시간대를 발견으로

glibc는 2.10.1의 strptime()는 정보 페이지

`%z' 
     The offset from GMT in ISO 8601/RFC822 format. 

`%Z' 
     The timezone name. 

     _Note:_ Currently, this is not fully implemented. The format 
     is recognized, input is consumed but no field in TM is set. 
+0

이 가능 GMT에 넣고 그 값을 tm으로합니까? 2008년 (화) 2월 19일 20시 47분 53초 0530 2009년 4월 28일 (화) 18시 22분 39초 -0700 (PDT) 당신은 내게 그것을위한 코드를 제공 할 수 있는지 예, 정말 도움이 될 것입니다 경우 유닉스에서 (단지 2 ~ 3 개의 라이너) – AMM

0

에서 시간대를 수행합니다. 모든 작업은 표준 시간대가없는 데이터 형식을 tm 구조로 읽습니다. 고정 된 시간대 표시기를 직접 고쳐야합니다 (고정되어 있지 않은 경우). TZ을 설정하고 mktime을 사용하여 time_t으로 변환하십시오. tm.is_dst을 -1로 설정하면 mktime에 자동으로 DST를 파악하도록 요청할 수도 있습니다.

steams를 사용하여 자체 파서를 구성 할 수도 있습니다 (부스트는 몇 가지 형식을 지원하지만 일반적으로 충분하지 않을 수도 있음). 위와 같이 mktime을 사용하여 time_t을 작성할 수 있습니다.