28 const auto now = std::time(
nullptr);
29 const auto* time = std::localtime(&now);
32 ss << std::put_time(time,
"%Y%m%d%H%M%S");
43template <
typename Rep,
typename Period>
46 using namespace std::chrono;
47 using days = duration<int, std::ratio<86400>>;
48 const auto d = duration_cast<days>(input);
50 const auto h = duration_cast<hours>(input);
52 const auto m = duration_cast<minutes>(input);
54 const auto s = duration_cast<seconds>(input);
56 const auto dc = d.count();
57 const auto hc = h.count();
58 const auto mc = m.count();
63 ss << d.count() <<
"d";
69 ss << h.count() <<
"h";
75 ss << m.count() <<
"m";
82 ss << s.count() <<
's';
96template <
typename Duration = std::chrono::milliseconds>
99 using namespace std::chrono;
100 const std::regex dReg{
101 R
"((\d+h){0,1}(\d+m(?!s)){0,1}(\d+s){0,1}(\d+ms){0,1})"};
104 if (std::regex_search(str, match, dReg)) {
105 for (std::size_t i = 1; i < 5; i++) {
106 if (match[i].length() == 0) {
109 auto part = match[i].str();
110 auto end = (i == 4) ? part.size() - 2 : part.size() - 1;
111 auto val = std::stoi(part.substr(0, end));
113 d += std::chrono::hours(val);
115 d += std::chrono::minutes(val);
117 d += std::chrono::seconds(val);
119 d += std::chrono::milliseconds(val);
123 throw std::invalid_argument(
"Cannot parse as duration: " + str);
Volume Cartographer library
auto DurationFromString(const std::string &str) -> Duration
Convert a duration string to a a std::chrono duration.
auto DateTime() -> std::string
Returns a string representation of the current date and time.
auto DurationToString(std::chrono::duration< Rep, Period > input) -> std::string
Returns a string representation of the provided time duration.