最終更新日時: 2026年06月08日 20時56分08秒 (JST)
Akira Takahashi が更新

履歴 編集

type-alias
<ctime>

# std::time_t

    namespace std {
      using time_t = integer-type; // C++11 (C99) 以前
      using time_t = real-type;    // C++14 (C11) 以降
    }

## 概要

`time_t`は、1970年1月1日からの経過時間 (UNIX時間と呼ばれる) を表すための、算術型の別名である。

- C++11 (C99) まで、この型は整数型の別名
- C++14 (C11) 以降、この型は整数型もしくは浮動小数点数型の別名

この型の分解能と値の範囲は実装定義。

## 備考

- 値の範囲が実装定義であるため、策定当時の標準ライブラリ実装では32ビット符号付き整数型の別名として定義されていた。しかし32ビットでは秒単位で扱った場合に、西暦2038年1月19日にオーバーフローしてしまうことが判明した。そのため、現在多くの実装では64ビット符号付き整数型の別名として定義される。64ビットで秒単位の場合は西暦3000億年まで扱えるため、オーバーフローの問題は気にしなくてよいだろう
- Cの規格として、`time_t`はreal typeであると定義される。Cでのreal typeは、整数型と浮動小数点型の総称である
  - C++にそのような型の分類はない

## 例

    #include <ctime>
    #include <iostream>

    int main()
    {
      // ビット数を確認
      std::cout << sizeof(std::time_t) * 8 << std::endl;

      // 現在日時を取得 (1970年1月1日からの経過秒)
      std::time_t now = std::time(nullptr);

      // 現在日時を文字列に変換して出力
      std::cout << std::ctime(&now) << std::endl;
    }

### 出力例

    64
    Fri Dec 20 16:21:01 2019

## 参照

- UNIX時間 - Wikiepdia
- 2038年問題 - Wikipedia