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

履歴 編集

class
<ctime>

std::timespec(C++17)

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で動作確認できた

参照