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 << "秒";