【C++】std::chronoとstd::localtimeで現在日時を出力する

std::chronoとstd::localtime関数を使って現在の日時を出力する方法です。

std::chronoとstd::localtimeで日時を出力

std::chrono::system_clockを使用して取得した時間(std::time_t値)をstd::localtimeで現地時間で表現されたカレンダー時間に変換します。

#include <iostream>
#include <sstream>
#include <string>
#include <chrono>
#include <iomanip>

int main()
{
  // 時刻の整形
  auto now = std::chrono::system_clock::now();
  auto time = std::chrono::system_clock::to_time_t(now);
  std::tm* lt = std::localtime(&time);
  uint64_t ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count();
  std::stringstream ss;
  ss << lt->tm_year+1900;
  ss << "/" << std::setfill('0') << std::right << std::setw(2) << lt->tm_mon + 1;
  ss << "/" << std::setfill('0') << std::right << std::setw(2) << lt->tm_mday;
  ss << " " << std::setfill('0') << std::right << std::setw(2) << lt->tm_hour;
  ss << ":" << std::setfill('0') << std::right << std::setw(2) << lt->tm_min;
  ss << ":" << std::setfill('0') << std::right << std::setw(2) << lt->tm_sec;
  ss << "." << std::setfill('0') << std::right << std::setw(3) << (ms % 1000);

  std::cout << ss.str() << std::endl;

  return 0;
}
【出力】
2024/02/17 23:04:12.865

10行目と11行目でstd::chrono::system_clockを使用して現在時刻のstd::time_t値を取得しています。

12行目でstd::time_t値を現地時間のカレンダー時間に変換します。

13行目はミリ秒を出力するためにためにエポックからの経過時間をミリ秒に変換しています。

15行目から21行目で、現在時刻を「YYYY/MM/DD HH:MM:SS.ZZZ」のフォーマットに整形しています。

出力を「2024年2月18日 5時23分8秒」の様に0埋めしない場合は以下の様なコードでOKです。

  ss << lt->tm_year+1900 << "年" << lt->tm_mon+1 << "月" << lt->tm_mday << "日 ";
  ss << lt->tm_hour << "時" << lt->tm_min << "分" << lt->tm_sec << "秒";

スポンサーリンク

  • この記事を書いた人

まさじぃ

ダメプログラマ歴17年です。 プログラミング関連の事や、 自分で使って良かったもの等の紹介をメインにやっています。

-プログラミング
-