C++ でシステム時刻を出力する
-
C++ で
std::chrono::system_clock
とstd::ctime
を使用してシステム時刻を出力する -
C++ で
time
、localtime
およびstrftime
を使用してシステム時刻を出力する
この記事では、C++ でシステム時刻を出力する方法のいくつかの方法について説明します。
C++ で std::chrono::system_clock
と std::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++ で time
、localtime
および 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