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) …

C++で「静的でないメンバー参照は特定のオブジェクトを基準とする相対参照である必要があります」エラーが出た時の対処

  <目次> (1) C++で「静的でないメンバー参照は特定のオブジェクトを基準とする相対参照である必要があります」エラーが出た時の対処  (1-1) エラーメッセージ  (1-2) 原因 …

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

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

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

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

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

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

  • English (United States)
  • 日本語
Top