我想創建一個程式,將特定的人類可讀格式的日期轉換為歷時。
到目前為止,我有以下代碼,其中第一部分創建了這種人類可讀的格式,第二部分將其轉換為紀元。
#include <time.h>
#include <iostream>
#include <ctime>
#include <string>
#include <cstring>
using namespace std;
int main(int argc, char const *argv[])
{
time_t timeNow。
struct tm *ltm = NULL。
time(&timeNow)。
ltm = localtime(&timeNow)。
char buffer[100] 。
strftime(buffer, sizeof(buffer), "%c%Z", ltm);
cout << "人類可讀的時間戳是"/span> << buffer << endl。
std::tm tmNow;
memset(&tmNow, 0, sizeof(tmNow))。
strptime(buffer, "%c %Z", & tmNow)。
cout << "epoch timestamp is " << mktime(& tmNow) << endl;
return 0。
}
因此,我得到的列印結果是:
人類可讀的時間戳是Thu Sep 16 10。 23:06 2021 EEST
紀元時間戳是1631780586。
我的時區是EEST,正如人們所看到的那樣,但紀元一欄是錯誤的,因為它提前了一個小時。正確的應該是1631776986。我想我在當地時間上做錯了什么。我已經找到了第三方庫的例子,如boost或poco,它們可以進行這種轉換,但我更希望上述轉換是通過使用本地C 完成的。 有誰知道我錯過了什么嗎?
uj5u.com熱心網友回復:
C語言的計時/校準API很難正確使用(這也是為什么C 正在遠離它)。
從C標準:
如果夏令時生效,
tm_isdst的值為正,如果夏令時不生效,則為零,如果資訊不可用,則為負。
在呼叫mktime之前設定tmNow.tm_isdst = -1;。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/311892.html
標籤:
上一篇:基于日期范圍的多幣種查詢表
下一篇:在嘗試添加一些資料時,得到錯誤AttributeError:'datetime.datetime'物件沒有屬性'timedelta'。
