C++ でシステム時刻を出力する

胡金庫 2023年10月12日
  1. C++ で std::chrono::system_clockstd::ctime を使用してシステム時刻を出力する
  2. C++ で timelocaltime および strftime を使用してシステム時刻を出力する
C++ でシステム時刻を出力する

この記事では、C++ でシステム時刻を出力する方法のいくつかの方法について説明します。

C++ で std::chrono::system_clockstd::ctime を使用してシステム時刻を出力する

std::chrono::system_clock はシステム全体の壁時計を表し、std::time_t タイプとの間で変換する 2つの関数を提供します。後者のオブジェクトは、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

次の例に示すように、同じ方法を使用して、エポック値を同様の形式で表示することもできます。エポックは通常、POSIX/UNIX システムでは 1970 年 1 月 1 日ですが、クロノライブラリで提供される異なるクロックで同じ値である必要はありません。

#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

C++ で timelocaltime および strftime を使用してシステム時刻を出力する

または、POSIX 固有の関数である time を使用して、time_t 構造を直接取得することもできます。time_t は基本的に、エポックからの秒数を格納する整数です。前の方法と同様に、ctime を使用して事前定義された形式の文字列に変換するか、localtime 関数を呼び出すことができます。localtime 関数は、time_t オブジェクトを tm 構造に変換します。これは、特別な指定子を使用して出力文字列をフォーマットするために使用できる分解された時間フォーマットです。フォーマットは、4つのパラメーターを受け取る strftime 関数によって実行されます。最後のパラメーターは struct tm へのポインターです。最初の引数は文字列が格納されるメモリアドレスを指定し、次の 2つの引数は文字列の最大サイズとフォーマット指定子です。フォーマット仕様の詳細な概要は、このページで見ることができます。

#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
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Time