在 C++ 中列印系統時間

Jinku Hu 2023年10月12日
  1. 使用 std::chrono::system_clockstd::ctime 在 C++ 中列印系統時間
  2. 使用 timelocaltimestrftime 在 C++ 中列印系統時間
在 C++ 中列印系統時間

本文將說明幾種如何在 C++ 中列印系統時間的方法。

使用 std::chrono::system_clockstd::ctime 在 C++ 中列印系統時間

std::chrono::system_clock 代表系統範圍內的時鐘,它提供了兩個函式來與 std::time_t 型別進行相互轉換。我們可以使用 ctime 函式處理後一個物件,並返回以 null 終止的字串,形式為 Wed Jun 30 21:49:08 1993\n。在這種情況下,我們構造了一個單獨的函式來封裝兩個呼叫,並將 string 值返回給呼叫者。注意,我們還刪除了換行符,以更靈活的形式返回值。另外,system_clock::now 用於檢索當前時間點。

#include <sys/time.h>

#include <chrono>
#include <ctime>
#include <iostream>

using std::cout;
using std::endl;
using std::string;

std::string timeToString(std::chrono::system_clock::time_point &t) {
  std::time_t time = std::chrono::system_clock::to_time_t(t);
  std::string time_str = std::ctime(&time);
  time_str.resize(time_str.size() - 1);
  return time_str;
}

int main() {
  auto time_p = std::chrono::system_clock::now();
  cout << "Current time: " << timeToString(time_p) << endl;

  return EXIT_SUCCESS;
}

輸出:

Current time: Fri Apr  1 01:34:20 2021

如下面的示例所示,還可以使用相同的方法以類似的形式顯示 Epoch 值。請注意,對於 POSIX/UNIX 系統,Epoch 通常是 1970 年 1 月 1 日,但是對於 chrono 庫中提供的不同時鐘,它不需要是相同的值。

#include <sys/time.h>

#include <chrono>
#include <ctime>
#include <iostream>

using std::cout;
using std::endl;
using std::string;

std::string timeToString(std::chrono::system_clock::time_point &t) {
  std::time_t time = std::chrono::system_clock::to_time_t(t);
  std::string time_str = std::ctime(&time);
  time_str.resize(time_str.size() - 1);
  return time_str;
}

int main() {
  std::chrono::system_clock::time_point time_p2;
  cout << "Epoch: " << timeToString(time_p2) << endl;

  return EXIT_SUCCESS;
}

輸出:

Epoch: Thu Jan  1 00:00:00 1970

使用 timelocaltimestrftime 在 C++ 中列印系統時間

另外,我們可以使用 POSIX 特定的函式-time,並直接檢索 time_t 結構體。time_t 本質上是一個整數,儲存自紀元以來的秒數。與前面的方法類似,我們可以使用 ctime 轉換為預定義形式的字串,或者呼叫 localtime 函式。localtime 函式將 time_t 物件轉換為 tm 結構,該結構是細分的時間格式,可以使用特殊說明符來格式化輸出字串。格式化是通過帶有四個引數的 strftime 函式完成的,最後一個引數是指向 struct tm 的指標。第一個引數指定儲存字串的記憶體地址,後兩個引數是字串的最大大小和格式說明符。格式規範的詳細概述可以在此網頁上找到。

#include <sys/time.h>

#include <ctime>
#include <iostream>

using std::cout;
using std::endl;
using std::string;

int main() {
  char tt[100];
  time_t now = time(nullptr);
  auto tm_info = localtime(&now);

  strftime(tt, 100, "%Y-%m-%d %H:%M:%S", tm_info);
  puts(tt);

  return EXIT_SUCCESS;
}

輸出:

2021-04-02 05:42:46
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C++ Time