2012-12-12 4 views
1

두 가지 기능이 있습니다. 첫 번째는 time_t를 string으로 변환합니다. 두 번째 문자열은 time_t입니다. 문자열로 변환하여 복원해야하는 날짜가 있습니다.windows에서 앞뒤로 문자열을 변환하는 time_t

기능은 내가 다음 줄이 코드를 테스트 할 때 지금내는 이상한 것 같다

void split(const string &s, char delim, vector<string>& elems) { 
    stringstream ss(s); string item; 
    while(getline(ss, item, delim)) { elems.push_back(item);} return; 
} 

time_t getDateInTimeTfromHyphenSplitString(string s) 
{ 
    struct tm tmvar = {0}; 
    vector<string> tim; 
    split(s.c_str(),'-',tim); 
    tmvar.tm_year = atoi(tim[2].c_str()) - 1900; 
    tmvar.tm_mon = atoi(tim[1].c_str()); 
    tmvar.tm_mday = atoi(tim[0].c_str()); 
    tmvar.tm_isdst = 0; 
    time_t ttm = mktime(&tmvar); 
    return ttm; 
} 

string getDateInHyphenSplitStringfromTimeT(time_t t) 
{ 
    struct tm *timeinfo = (tm*)malloc(sizeof(tm)); 
    gmtime_s(timeinfo, &t); 
    char *buffer = NULL; 
    buffer = (char*)malloc((size_t)20); 
    strftime(buffer, 20, "%d-%m-%Y", timeinfo); 
    string s = buffer ; 
    return s; 
} 

있습니다.

string sk = "31-12-2010"; 
cout << sk << endl; 
time_t ttk = getDateInTimeTfromHyphenSplitString(sk); 
sk = getDateInHyphenSplitStringfromTimeT(ttk); 

cout << sk << endl; 

입력 : - 31-12-2010 출력 : - 30-01-2011

이상하게도 내가 입력으로 공급 어떤 일 1 개월 차이를 받고 있습니다.

정확한 시간을 알려주는 방법을 알려주십시오.

추 신 : '-'로 날짜의 서식을 지정해야하기 때문에이 기술을 선택합니다. 따라서 0 ~ 11

가치에 이르기까지

+1

된 mktime ((날짜는 UTC에서 다를 수 있습니다) . 대신에 [timegm()] (http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/pkgtools/libnbcompat/files/timegm.c)을 사용할 수 있습니다. 현지 시간을 원하면 gmtime() 대신 localtime()을 사용하십시오. – jfs

+0

Sebastian에 감사드립니다. Lx 제안 변경 사항과 함께 작동합니다. – Naresh

답변

1

tm_mon 카운트 "months since January"는, 당신은 입력 개월에서 1을 뺄 필요가있다.


그 외에도, 코드는 메모리 누수 : 당신은 결코 free 당신의 malloc 에드 메모리. C++로 프로그래밍 했으므로 malloc/free를 사용하지 말고 대신 new, new[], delete and delete[]을 권장합니다. malloc에는 객체에 대한 개념이 없으며 생성자를 호출하지 않기 때문입니다. 함수의 특별한 경우

, 당신은 심지어 모든 동적 메모리 할당이 필요하지 않을 : 현지 시간대의 시간으로 tmvar 취급)

struct tm timeinfo; 
    gmtime_s(&timeinfo, &t); 
    char buffer[20]; 
    strftime(buffer, sizeof(buffer), "%d-%m-%Y", &timeinfo); 
+0

멋지다.하지만 날짜는 지금 수정이 필요하다. – Naresh

+0

+1을 더해야했습니다. \t tmvar.tm_mon = atoi (tim [1] .c_str()) - 1; \t tmvar.tm_mday = atoi (tim [0] .c_str()) +1; – Naresh