私には2つの機能があります。最初のものは time_t を文字列に変換します。2 番目の文字列は 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;
入力:- 2010 年 12 月 31 日 出力:- 2011 年 1 月 30 日
奇妙なことに、入力として指定した日付に対して 1 か月の差が生じています。
正しい時刻に戻す方法があれば教えてください。
PS: 日付を「-」でフォーマットする必要があるため、この手法を選択します。