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

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

関連記事

Valgrindで行番号を表示させる方法

  <目次> (1) Valgrindで行番号を表示させる方法  (1-1) 行番号を表示させる方法  (1-2) (参考)「-g」オプションについて (1) Valgrindで行番号を表示 …

ValgrindのDefinetely Lostの意味や実際のサンプルをご紹介

  <目次> (1) ValgrindのDefinetely Lostの意味や実際のサンプルをご紹介  (1-1) Valgrindの「Definetely Lost」はどんな状況?  (1 …

C++のtime関数とlocaltime関数の違いについて

  <目次> (1) C++のtime関数とlocaltime関数の違いについて  (1-1) C++のlocaltime関数の概要とサンプル  (1-2) C++のtime関数の概要とサン …

C++のlocaltime関数がスレッドアンセーフである理由と使用上の注意点

  <目次> (1) C++のlocaltime関数がスレッドアンセーフである理由と使用上の注意点  (1-1) localtime関数がスレッドアンセーフである理由  (1-2) loca …

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

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

  • English (United States)
  • 日本語
Top