總結問題
我有兩個格式為 YYYY-MM-DD:hh:mm:ss 的字串,我想計算它們之間的時差。例如,2021-10-01:03:44:34和2021-10-01:03:44:54之間的差異應該是20秒。但是,我得到的結果是0。
代碼
我嘗試了以下方法:
#include <iomanip>
#include <iostream>
using namespace std;
using timestamp = time_t;
auto StringToTimestamp(const string& timeString) -> timestamp {
tm tm {};
stringstream ssBuffer(timeString);
ssBuffer >> get_time(&tm, "%Y-%b-%d:%H:%M:%S");
cout << tm.tm_year << " " << tm.tm_mon << " " << tm.tm_mday << " "
<< tm.tm_hour << " "<< tm.tm_min << " " << tm.tm_sec << " " << endl;
return mktime(&tm);
}
int main() {
string beg = {"2021-10-01:03:44:34"s};
string end = {"2021-10-01:03:44:54"s};
timestamp begTm = StringToTimestamp(beg);
timestamp endTm = StringToTimestamp(end);
double diff = difftime(endTm, begTm);
cout << "Time difference is " << diff << endl;
return 0;
}
輸出
121 0 0 0 0 0
121 0 0 0 0 0
Time difference is 0
預期產出
2021 10 01 03 44 34
2021 10 01 03 04 54
Time difference is 20
為什么輸出是這樣?我怎樣才能解決這個問題?
編輯
我將此行更改"%Y-%b-%d:%H:%M:%S"為"%Y-%m-%d:%H:%M:%S"現在輸出是
121 9 1 3 44 34
121 9 1 3 44 54
Time difference is 20
為什么年月“不正確”?
uj5u.com熱心網友回復:
您使用轉換說明符%b來獲取月份,但它應該是%m:
ssBuffer >> get_time(&tm, "%Y-%m-%d:%H:%M:%S");
%b- 決議月份名稱,完整的或縮寫的,例如Oct(非數字)%m- 將月份決議為十進制數(范圍 [01,12]),允許但不是必需的前導零
年份和月份是正確的。121 是自 1900 年以來的年數,9 是月份,從零開始 [0,11],這是std::tm.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/317132.html
上一篇:非靜態成員函式的參考
下一篇:各種環境下的POST請求
