時間操作したい(std::chrono

1#include <chrono>

chronoはC++11以降で使えるようになった時間操作クラスです。

現在時刻したい(std::chrono::system_clock

 1#include <chrono>  // std::chrono::system_clock
 2#include <ctime>   // std::time_t, std::tm, localtime_r
 3#include <fstream>  // std::fstream
 4#include <iomanip>  // std::put_time
 5#include <sstream>  // std::stringstream
 6
 7namespace {
 8    // 無名の名前空間に入れて、スコープを小さくしておく
 9    // @code
10    // G4String file_name = GetFileName();
11    // G4cout << "Filename: " << file_name << G4endl;
12    // @code
13
14    G4String GetFileName()
15    {
16        // 現在のシステム時刻を取得
17        auto now = std::chrono::system_clock::now();
18        // time_t型に変換
19        std::time_t now_t = std::chrono::system_clock::to_time_t(now);
20        // tm構造体に変換
21        std::tm now_tm;
22        localtime_r(&now_t, &now_tm);
23
24        // 時刻をフォーマット: yyyy-mm-ddTHHhMMmSSs
25        std:stringstream ymd;
26        ymd << std::put_time(&now_tm, "%Y-%m-%dT%Hh%Mm%Ss");
27
28        // ファイル名を生成
29        std::stringstream file_name;
30        file_name << ymd.str() << ".csv";
31    };
32};  // namespace

現在時刻を取得して、ファイル名を生成してみました。 思った以上に手間がかかるので関数にしておくとよいと思います。

注釈

C++20からstd::formatというモジュールが使えるようです。 Geant4がC++20に対応したら試してみるといいかもしれません。

リファレンス