我有2個函數。首先將time_t轉換爲字符串。第二個字符串爲time_t。 我只需要將日期轉換並恢復爲字符串。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月的差異。
請讓我知道,如何得到正確的時間回來。
PS:我選擇這種技術,因爲我需要用' - '格式化日期。
mktime()可治療tmvar爲本地時區時間(日期可能會在UTC不同) 。您可以使用[timegm()](http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/pkgtools/libnbcompat/files/timegm.c)。如果你想要本地時間,那麼試試localtime()而不是gmtime() – jfs
謝謝Sebastian,它也適用於Lx建議的更改。 – Naresh