kunlang_tbox/include/common/utils.h

81 lines
2.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <limits.h>
#include <unistd.h>
#include <chrono>
#include <ctime>
#include <filesystem>
#include <fstream>
#include <iomanip>
#include <sstream>
#include <string>
namespace common
{
// 获取当前北京时间字符串 (精确到毫秒)
inline std::string get_current_time_string()
{
using namespace std::chrono;
auto now = system_clock::now();
auto ms = duration_cast<milliseconds>(now.time_since_epoch()) % 1000;
// 先转 UTC
auto t = system_clock::to_time_t(now);
std::tm utc_tm = *std::gmtime(&t);
utc_tm.tm_hour += 8;
mktime(&utc_tm);
std::ostringstream oss;
oss << std::put_time(&utc_tm, "%Y-%m-%d %H:%M:%S") << '.' << std::setw(3) << std::setfill('0') << ms.count();
return oss.str();
}
// 获取当前日期字符串 (仅日期,用于日志文件名)
inline std::string get_current_date_string()
{
using namespace std::chrono;
auto now = system_clock::now();
auto t = system_clock::to_time_t(now);
// 转成 UTC
std::tm utc_tm = *std::gmtime(&t);
// UTC + 8 小时
utc_tm.tm_hour += 8;
mktime(&utc_tm); // 自动修正日期
std::ostringstream oss;
oss << std::put_time(&utc_tm, "%Y-%m-%d");
return oss.str();
}
// 获取文件大小
inline size_t get_file_size(const std::string& filename)
{
std::ifstream in(filename, std::ifstream::ate | std::ifstream::binary);
return in.is_open() ? static_cast<size_t>(in.tellg()) : 0;
}
// 获取可执行文件目录下的文件完整路径
inline std::string get_executable_file_path(const std::string& filename)
{
char result[PATH_MAX];
ssize_t count = readlink("/proc/self/exe", result, PATH_MAX);
std::string path(result, count);
auto dir = path.substr(0, path.find_last_of('/'));
if (dir.back() != '/') dir += '/';
return dir + filename;
}
// 获取当前毫秒时间戳steady_clock不受系统时间影响
inline uint64_t get_timestamp_ms()
{
using namespace std::chrono;
return duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
}
} // namespace common