Skip to content

Latest commit

 

History

History
89 lines (68 loc) · 2.5 KB

timespec_get.md

File metadata and controls

89 lines (68 loc) · 2.5 KB

timespec_get

  • timespec_get[meta header]
  • std[meta namespace]
  • function[meta id-type]
  • cpp17[meta cpp]
namespace std {
  int timespec_get(struct timespec *ts, int base);
}
  • timespec[link timespec.md]

概要

指定したベース時間に基づいた、経過秒と経過ナノ秒を取得する。

効果

パラメータbaseで指定されたベース時間に基づいて、tsに経過秒と経過ナノ秒を書き込む。

経過ナノ秒は、経過時間の秒未満の値である。この値は、システムが保持するクロックの分解能に従って丸められる。

戻り値

現在時間の取得に成功した場合、非ゼロの値としてbaseを返す。失敗した場合はゼロを返す。

#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;
}
  • std::timespec[color ff0000]
  • std::timespec_get[link timespec_get.md]
  • TIME_UTC[link time_utc.md]
  • chrono::duration_cast[link /reference/chrono/duration_cast.md]
  • chrono::milliseconds[link /reference/chrono/milliseconds.md]
  • chrono::nanoseconds[link /reference/chrono/nanoseconds.md]
  • ms.count()[link /reference/chrono/duration/count.md]

出力例

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

参照