Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

C++

C++のtime関数やtime_t型の使い方について

投稿日:2021年10月12日 更新日:

 

<目次>

(1) C++のtime関数やtime_t型の使い方について
 (1-1) C++のtime関数とtime_t型とは?
 (1-2) C++のtime_t関数のサンプル

(1) C++のtime関数やtime_t型の使い方について

C++のtime関数とtime_t型は似た名前で最初は紛らわしいですが、それぞれの概要や使い方についてご紹介する事で、違いについても理解できる事を目指します。

(1-1) C++のtime関数とtime_t型とは?

「time_t」はtime関数の戻り値を格納するための型として使われます。一方で「time」関数は引数に与えた「time_t」型のポインタに暦時刻を格納します。以下はそれぞれの概要です。

(表)

関数/オブジェクト 引数 戻り値 概要
time time_t * time_t ⇒次節の「●サンプル②」にプログラムあり

(引数)
・「time_t」型のオブジェクトへのポインタ

(戻り値)
・「time_t」型のオブジェクトを返却

(処理概要)
・引数に与えた「time_t」型のポインタに暦時刻を格納します。暦時刻は、歴史上の経緯から1970年1月1日0:00を基準として、そこから現在までの経過時間を「秒」で返却します。

time_t ⇒次節の「●サンプル①」にプログラムあり

・主に「time関数の戻り値の型」として使われます(カレンダー時刻を返却)
・歴史的な経緯から、通常は1970年1月1日の00:00からの経過時間(秒)の形で時刻を保持します
・なので、例えば1970年からの年数(2021年なら51年)を求めるためには、次のように計算します。

(例)
time(&timer)/60/60/24/365

目次にもどる

(1-2) C++のtime_t関数のサンプル

●サンプル①

「time(&t)」のように「time_t」型の変数「t」への参照(&t)を引数にして、time関数を実行します。これが1970年からの経過秒数を返却するので、60で割って「分」を算出し、更に60で割って「時」を算出し、更に24で割って「日」を出し、更に365で割って「年」を算出します。

 

(例)
#include <iostream>
#include <time.h>
using namespace std;

int main(void) {
    //# time_t型の変数を宣言
    time_t t;

    //# time()関数の引数として、time_tのポインタを与える
    //# 1970~2021年=51年の想定
    cout << "time関数の結果:" << (time(&t) / 60 / 60 / 24 / 365) << endl;
}
 
(実行結果)
51
 
(図111)

●サンプル②

①time関数で「1970/1/1~現在までの秒数」を「time_t型」で取得する。

②その結果をlocaltime関数に代入し、「struct tm型」の構造体に分解して詰めます。
↓(年、月、日、時、分など各変数に分解して詰める)
③その結果をasctime関数に代入し「char型」の表示形式に変換します。

(例)
#include <time.h>
#include <iostream>
using namespace std;
int main ()
{
  //# time_t型の変数を定義
  time_t tmp;
  
  //# tm型のポインタを定義
  struct tm * timeinfo;

  //# カレンダー時刻を取得 (time_t*型)
  //#  ⇒1970/1/1~現在までの秒数
  time (&tmp);

  //# 現地時刻を取得 (time_t*型)
  timeinfo = localtime (&tmp);
  cout<< asctime(timeinfo);

  return 0;
}

(実行結果) Tue Jun 29 12:24:05 2021

 
(図121)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-C++

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

C++の動的メモリ割当と静的メモリ割当の違いについて

  <目次> (1) C++の動的メモリ割当と静的メモリ割当の違いについて  (1-1) 静的メモリ割当てとは?  (1-2) 動的メモリとは?  (1-3) 動的メモリの割当て  (1-4 …

C++のunsigned char型とは?概要やsigned charとの違いもご紹介

<目次> (1) C++のunsigned char型とは?概要やsigned charとの違いもご紹介  (1-1) 概要  (1-2) サンプルプログラム①:疎通確認 (1) C++のunsign …

C++の「::」の記載の意味について

  <目次> (1) C++の「::」の記載の意味について  (1-1) 「::」の意味は?  (1-2) サンプル①:スコープ演算子「::」を使ってグローバル変数にアクセス  (1-3) …

ポインタと参照の違いについてサンプルPGを使ってご紹介

  <目次> (1) ポインタと参照の違いについてサンプルPGを使ってご紹介  (1-1) ポインタと参照の概要  (1-2) 両者の違い①:宣言/初期化  (1-3) 両者の違い②:再代入 …

GDBの使い方をC++のプログラムのデバッグを例にご紹介

  <目次> (1) GDBの使い方をC++のプログラムのデバッグを例にご紹介  (1-1) GDBのデバッグのシナリオ概要(例)  (1-2) GDBのデバッグ手順(例)  (1-3) そ …

  • English (United States)
  • 日本語
Top