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) 「valgrind」コマンドの基本的な使い方  (1-3) …

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

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

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

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

C++のfork関数の構文や使い方について

  <目次> (1) C++のfork関数の構文や使い方について  (1-1) fork()関数とは?概要や目的  (1-2) fork()関数の構文  (1-3) fork()関数のサンプ …

C++のマルチスレッド処理のサンプルや概要について

  <目次> (1) C++のマルチスレッド処理のサンプルや概要について  (1-1) C++のマルチスレッドの概要  (1-2) 構文1:関数ポインタ式  (1-3) 構文1(例):関数ポ …

  • English (United States)
  • 日本語
Top