首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ time() 函式詳解:回傳值、精度與常見誤區

     編輯:程式設計疑難解答

函式簽名


#include 
std::time_t time(std::time_t* arg); // C++11 起可用 nullptr

回傳值含義

  • 型別:std::time_t(通常為 64 位元有號整數)
  • 意義:從 Unix 紀元 (1970-01-01 00:00:00 UTC) 到目前的 秒數
  • 精度:秒級,不含毫秒/微秒

常見問題 Q&A

問題答案
執行幾毫秒的程式,回傳值會變嗎?可能。若剛好跨越秒邊界(如 10:00:00.998 → 10:00:01.002),兩次呼叫會差 1 秒。
如何取得毫秒精度?使用 std::chrono::system_clock::now() (C++11) 或平台 API (GetTickCount64, clock_gettime)。
time_t 是有號還是無號?標準規定為算術型別,實作多為有號 64 位元,支援 2038 年問題後的日期。
如何轉為可讀字串?std::ctime(&t)、std::strftime、std::put_time (C++11)。

程式碼範例


#include 
#include 
#include 

int main() {
    // C 風格
    std::time_t t = std::time(nullptr);
    std::cout << "秒數: " << t << '\n';
    std::cout << "時間: " << std::ctime(&t);

    // C++11 高精度
    auto now = std::chrono::system_clock::now();
    auto ms = std::chrono::duration_cast(now.time_since_epoch()).count();
    std::cout << "毫秒數: " << ms << '\n';
}

最佳實務

  • ✅ 僅需「日期/秒級日誌」用 time()
  • ✅ 需「效能計時、毫秒級時間戳」用 std::chrono
  • ✅ 跨平台儲存時間戳:統一用 UTC 秒數或 ISO 8601 字串
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved