linux时间戳转换不对,转换为unix时间戳不正确
我有我寫了一個函數(shù)(如果有一個很好的標(biāo)準(zhǔn)替代,請讓我知道...)轉(zhuǎn)換為unix時間戳不正確
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 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)的函數(shù)是格式1970-01-01 00:00:00.0。所述split_string()函數(shù)把字符串time_str到含有載體:
{1970年,01,01,00,00,00}
其用于填寫given_time結(jié)構(gòu)。
我寫了一個函數(shù)來測試它,并正確地通過它輸入(epoch開始)。但是,它給我的時間是21600,這是1970-01-01 06:00:00或UTC + 6。期望的輸出是(時期的開始)。
注意:我在美國中部時區(qū),即UTC - 6。1970年1月1日午夜CST,time @ UTC將在1970年1月1日06:00:00。
我的函數(shù)中是否有任何特定于我的時區(qū)的東西?我在這個函數(shù)中做了什么錯誤,或者我可以做些不同的事情來使它獨立于區(qū)域,或者至少總是UTC。
2011-01-13
Sagar
+0
此外,我不能使用boost庫或任何其他庫。我只能使用標(biāo)準(zhǔn)的C++東西。 –
2011-01-13 16:22:55
+1
C++庫中的時區(qū)處理很隱晦。如果你的環(huán)境變量`TZ`的值設(shè)置為UTC,那么這段代碼就可以工作。 –
2011-01-13 16:36:18
+1
mktime將當(dāng)前時間解釋為給定時間。所以如果你給1970-01-01 00:00:00它會在你的當(dāng)?shù)貢r間,所以mktime將返回UTC-0時間,即1970-01-01 06:00:00 –
2011-01-13 16:38:42
總結(jié)
以上是生活随笔為你收集整理的linux时间戳转换不对,转换为unix时间戳不正确的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Robocode
- 下一篇: linux用while循环输出1到10,