2009-10-12 7 views
2

날짜가 'date.txt'인 파일이 있습니다. Like Mon Oct 13 09:37:08 2009.C++의 날짜 비교

이제이 날짜를 시스템 날짜와 비교하고 싶습니다. C++에서 날짜를 비교하는 방법은 무엇입니까?

내가 지금

time_t timer; 
    struct tm *tblock; 
    timer = time(NULL); 
    tblock = localtime(&timer); 
    string str = asctime(tblock); 

은 내가 어떻게이 두 기간을 비교할 수, 시스템 날짜를 얻기 위해 '으로 date.txt'

string date; 
    while (inDateFile >>date) //inDateFile is an ifstream object 
      cout<<date<<endl; 

그리고이 코드를 파일에서 내용을 얻기 위해이 코드를 사용 .?

+0

질문에 대답하기에 충분한 데이터가 없습니다. 첫 번째 코드 스 니펫에서 '날짜'유형은 무엇입니까? – Omnifarious

+0

날짜는 문자열 데이터 유형입니다. 난 그냥 문자열에있는 파일의 내용을 읽고 그들을 표시하고있다 – SyncMaster

+0

이것은 본질적으로 대답이 아니라 단지 의견 : 지역이 당신이 읽는 텍스트에 어떻게 영향을 미치게 될 것인가, 그렇지 않은가? 이 모든 요구 사항이 약간 깨지기 쉽습니다. –

답변

4

구문 분석 값을 사용하면 std::mktime 함수를 사용하여 time_t을 얻고 이제 std::difftime을 사용하여 차이를 얻을 수 있습니다.

1

날짜 문자열을 숫자 시간 값 (32 또는 64 비트), 즉 시간을 변환 한 다음 시간 (NULL)이 반환 된 시스템 시간과 비교하십시오.

+0

man strptime/mktime – Test

+0

그래, 현재 날짜를 문자열로 변환하지 마십시오. 그것은 너에게 많은 것을주지 않을 것이다. data.txt 정보를 "시간"으로 저장하는 것 외에도 나중에 더 쉽게 조작 할 수 있습니다. – baash05

0

파일에서 문자열을 구문 분석하여 resp 값의 문자열을 분할해야하는 경우 다른 지역의 주문/월 이름이 다르므로 어떤 국가 영역을 고려해야 할지를 고려해야합니다 다른 토큰이 텍스트에 나타나는 순서대로 구성 할 수 있습니다.

이 문제를 해결하는 한 가지 방법은 예를 들어 문자열 '날짜'를 가져온 다음 boost에서 템플릿 Tokenizer을 사용하는 것입니다 (또는 C 방식으로 strtok() 함수를 호출하려는 경우). 구분 기호에 따라 부분 문자열로. 그 후에는 입력을 쉽게 변환 할 수 있습니다.

또 다른 간단한 방법은 전체 문자열을 구분 기호로 읽는 대신 파일에서 읽는 것입니다. ','그런 다음 다시 읽습니다. - inDateFile.getline()을 사용할 수 있습니다.

2

문자열에서 날짜를 읽고 비교하기 위해 부스트 date_time을 사용합니다. 그것은 우리의 경험에서 아주 잘 작동합니다.