私が書いた関数があります(適切な標準の代替品があれば教えてください...)
time_t get_unix_time(string time_str) {
time_t loctime;
time(&loctime);
struct tm *given_time;
time_str = time_str.substr(0, time_str.find_first_of('.'));
replace(time_str.begin(), time_str.end(), ':', ',');
replace(time_str.begin(), time_str.end(), '-', ',');
replace(time_str.begin(), time_str.end(), '/', ',');
replace(time_str.begin(), time_str.end(), ' ', ',');
given_time = localtime(&loctime);
vector<string> trecord = split_string(time_str, ',');
given_time->tm_year = atoi(trecord.at(0).c_str()) - 1900;
given_time->tm_mon = atoi(trecord.at(1).c_str()) - 1;
given_time->tm_mday = atoi(trecord.at(2).c_str());
given_time->tm_hour = atoi(trecord.at(3).c_str());
given_time->tm_min = atoi(trecord.at(4).c_str());
given_time->tm_sec = atoi(trecord.at(5).c_str());
return mktime(given_time);
}
関数への入力 (time_str) の形式は 1970-01-01 00:00:00.0です。split_string() 関数は、文字列time_str
を以下を含むベクトルに分割します。
{ 1970, 01, 01, 00, 00, 00 }
given_time 構造体を埋めるために使用されます。
私はそれをテストする関数を書き、正確にその入力 (エポックの開始) を渡しました。ただし、返される時間は 21600 で、これは1970-01-01 06:00:00またはUTC+6です。予想される出力は0 (エポックの開始) です。
注: 私は UTC - 6 の米国中部時間帯にいます。1970 年 1 月 1 日 CST の真夜中、時間 @ UTC は 1970 年 1 月 1 日 06:00:00 になります。
私のタイムゾーンに固有のものになっている私の機能に何かありますか? 私はこの関数で何か間違ったことをしていますか、それとも別のことをしてゾーンに依存しないようにするか、少なくとも常に UTC にすることができますか?