• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    class
    <ctime>

    std::timespec

    namespace std {
      struct timespec {
        time_t tv_sec;
        long tv_nsec;
      };
    }
    

    概要

    timespecは、timespec_get()関数によって返される、エポックからの経過時間を表す型である。各メンバ変数は、以下を意味する:

    変数 説明
    tv_sec エポックからの経過秒。
    値は0以上
    tv_nsec ナノ秒単位で表される秒未満の値
    値の範囲は[0, 999'999'999]

    #include <iostream>
    #include <ctime>
    #include <chrono>
    
    namespace chrono = std::chrono;
    
    int main()
    {
      // UTCベースの現在時間を取得する
      std::timespec ts;
      if (std::timespec_get(&ts, TIME_UTC) == 0) {
        std::cerr << "現在時間の取得に失敗した" << std::endl;
        return 1;
      }
    
      std::cout << "tv_sec:" << ts.tv_sec
                << " tv_nsec:" << ts.tv_nsec
                << std::endl;
    
      // 秒未満の値をミリ秒で取得
      auto ms = chrono::duration_cast<chrono::milliseconds>(chrono::nanoseconds{ts.tv_nsec});
      std::cout << "ms:" << ms.count() << std::endl;
    
      // 秒以上の値だけを日時フォーマットで出力
      std::cout << std::ctime(&ts.tv_sec) << std::endl;
    }
    

    出力例

    tv_sec:1558682399 tv_nsec:453303489
    ms:453
    Fri May 24 16:19:59 2019
    

    バージョン

    言語

    • C++17

    処理系

    備考

    • Clangは、グローバル名前空間 (POSIXの実装) では、3.1で動作確認できた
    • GCCは、グローバル名前空間 (POSIXの実装) では、4.4で動作確認できた

    参照