C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++でシステム時刻を取得・表示する3つの方法を徹底解説

C++では、システムの現在の日付や時刻を人間が読みやすい形式(Human Readable Form)で出力する方法が複数あります。本記事では、代表的な3つの手法をサンプルコードと実行結果とともにわかりやすく解説します。

方法1:time()・localtime()・asctime() を使う

最も古典的かつ広く使われているのが、<ctime>ヘッダーに含まれる標準ライブラリ関数を組み合わせる方法です。それぞれの役割は以下の通りです。

  • time():現在の暦時刻(カレンダー時間)を取得します。時刻は算術型(time_t型)として保持されます。
  • localtime():取得した時刻を、年月日や時分秒を格納する構造体(struct tm)に変換して埋め込みます。
  • asctime():構造体に格納されたローカル時刻を、人間が読みやすい文字列形式へ変換します。

出力される形式は「曜日 月 日 時:分:秒 年」となります。

サンプルコード

#include<iostream>
#include<ctime> // 日付と時刻を扱うためのヘッダー
using namespace std;
int main() {
    time_t t; // time()関数に渡す引数
    struct tm * tt; // localtime()用の変数を宣言
    time (&t); // time()に引数を渡す
    tt = localtime(&t);
    cout << "Current Day, Date and Time is = "<< asctime(tt);
    return 0;
}

実行結果

上記のプログラムを実行すると、以下のような出力が得られます。

Current Day, Date and Time is = Tue Jul 23 19:05:50 2019

方法2:chronoライブラリを使う

C++11で導入されたchronoライブラリは、経過時間を秒・ミリ秒・マイクロ秒・ナノ秒といった高精度な単位で計測できるモダンな時間処理ライブラリです。system_clock::now()で現在時刻を取得し、to_time_t()でtime_t型に変換した後、ctime()で文字列化します。

サンプルコード

#include <chrono>
#include <ctime>
#include <iostream>
using namespace std;
int main() {
    auto givemetime = chrono::system_clock::to_time_t(chrono::system_clock::now());
    cout << ctime(&givemetime) << endl;
}

実行結果

上記のプログラムを実行すると、以下のような出力が得られます。

Current Day, Date and Time is = Tue Jul 23 19:05:50 2019

方法3:ctime()とprintf()を使う

C言語スタイルの入出力関数であるprintf()と組み合わせれば、よりシンプルに現在時刻を出力できます。time(NULL)で現在時刻を直接取得し、ctime()が返す文字列をそのまま表示します。

サンプルコード

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
    time_t givemetime = time(NULL);
    printf("%s", ctime(&givemetime)); // ctime()は指定された時刻を返す
    return 0;
}

実行結果

上記のプログラムを実行すると、以下のような出力が得られます。

Tue Jul 23 20:14:42 2019

まとめ

このように、C++でシステム時刻を表示する方法は主に3つあります。手軽さを重視するなら従来のtime()系関数、モダンで高精度な時間管理が必要ならchronoライブラリを選ぶとよいでしょう。用途に応じて最適な方法を使い分けてください。

  1. C++で二分木を見やすい形式で2次元配列に出力する方法

    本記事では、二分木(バイナリツリー)を m×n の2次元文字列配列として整形して出力する方法を解説します。出力には以下のルールが適用されます。行数 m は、与えられた二分木の高さと一致すること。列数 n は、必ず奇数になること。ルートノードの値は、最初の行のちょうど中央に配置する。ルートノードが存在する行と列によって、残りの領域は「左下」と「右下」の2つの部分に分割される。左側の部分木は左下の領域へ、右側の部分木は右下の領域へそれぞれ出力する。左右の領域は同じサイズとする。片方の部分木が存在しない場合でも、何も出力はしないものの、もう一方の部分木と同じサイズの領域は確保しておく必要がある。ただ

  2. 【Windows 10】PCの時計が進む問題を解決する8つの対処法

    PCのシステム時計が、時刻を合わせたにもかかわらず数分後にはまた12〜15分ほど進んでしまう――このようなトラブルに悩まされていませんか?主な原因としては、PCのオーバークロック、CMOS設定の不備、Windows Timeサービスの破損などが挙げられます。また、マルウェアやウイルスがシステム時計やその他のシステム機能に干渉しているケースもあるため、まずはウイルス対策ソフトでフルスキャンを実行し、感染の有無を確認しておくと安心です。注意: PCのオーバークロックを無効化するだけで問題が解消される場合があります。それでも改善しない場合は、以下の対処法を順番に試してみてください。作業を始める前に、