#pragma once #include #include namespace date_time { static inline tm get_time(time_t* _time) { tm buf; time_t t = time(_time); #ifdef _MSC_VER localtime_s(&buf, &t); #else buf = *localtime(&t); #endif return buf; } static inline std::string fmt_time(const char* fmt, const s64 time) { tm buf; time_t t = time; #ifdef _MSC_VER localtime_s(&buf, &t); #else buf = *localtime(&t); #endif char str[80]; strftime(str, sizeof(str), fmt, &buf); return str; } static inline std::string current_time() { char str[80]; tm now = get_time(nullptr); strftime(str, sizeof(str), "%c", &now); return str; } template static inline std::string current_time_narrow() { char str[80]; tm now = get_time(nullptr); std::string parse_buf; if constexpr(separator != 0) parse_buf = std::string("%Y") + separator + "%m" + separator + "%d" + separator + "%H" + separator + "%M" + separator + "%S"; else parse_buf = "%Y%m%d%H%M%S"; strftime(str, sizeof(str), parse_buf.c_str(), &now); return str; } }