時間操作したい(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に対応したら試してみるといいかもしれません。