두 가지 기능이 있습니다. 첫 번째는 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
가치에 이르기까지
된 mktime ((날짜는 UTC에서 다를 수 있습니다) . 대신에 [timegm()] (http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/pkgtools/libnbcompat/files/timegm.c)을 사용할 수 있습니다. 현지 시간을 원하면 gmtime() 대신 localtime()을 사용하십시오. – jfs
Sebastian에 감사드립니다. Lx 제안 변경 사항과 함께 작동합니다. – Naresh