101 lines
2.9 KiB
C++
101 lines
2.9 KiB
C++
|
|
#include <dsm/utility.h>
|
|||
|
|
|
|||
|
|
namespace UtilityTools {
|
|||
|
|
|
|||
|
|
TimePoint time_point2zero(TimePoint time_point) {
|
|||
|
|
return second_zero2time_point(time_point2second_zero(time_point));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int time_point2second_zero(TimePoint time_point) {
|
|||
|
|
int seconds = (time_point.time_since_epoch().count()) / (size_t)pow(10, 9);
|
|||
|
|
return 86400 * (int)((seconds + 28800) / 86400) - 28800;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TimePoint second_zero2time_point(int seconds) {
|
|||
|
|
auto st_s = std::chrono::seconds(seconds);
|
|||
|
|
auto time_date =
|
|||
|
|
std::chrono::time_point<std::chrono::system_clock, std::chrono::seconds>(
|
|||
|
|
st_s);
|
|||
|
|
return time_date;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TimePoint millsecond_zero2time_point(int64_t millseconds) {
|
|||
|
|
auto st_s = std::chrono::milliseconds(millseconds);
|
|||
|
|
auto time_date = std::chrono::time_point<std::chrono::system_clock,
|
|||
|
|
std::chrono::milliseconds>(st_s);
|
|||
|
|
return time_date;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int diff_days(TimePoint stime, TimePoint etime) {
|
|||
|
|
return std::chrono::duration_cast<days>(etime - stime).count();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TimePoint string2TimePoint(std::string time_str, const std::string &fmt) {
|
|||
|
|
std::tm tm = {};
|
|||
|
|
std::stringstream ss(time_str);
|
|||
|
|
ss >> std::get_time(&tm, fmt.c_str());
|
|||
|
|
return std::chrono::system_clock::from_time_t(std::mktime(&tm));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int save_json_file(std::string path_ruleid, std::string file_name_date,
|
|||
|
|
nlohmann::json content, std::string root_dir) {
|
|||
|
|
try {
|
|||
|
|
// 将 JSON 对象写入文件
|
|||
|
|
|
|||
|
|
std::string file_path = root_dir + "/" + path_ruleid;
|
|||
|
|
std::string file_name = file_path + "/" + file_name_date + ".json";
|
|||
|
|
if (fs::exists(file_name)) {
|
|||
|
|
return 1;
|
|||
|
|
}
|
|||
|
|
if (create_path(file_path)) {
|
|||
|
|
std::ofstream ofs(file_name); // 创建文件输出流对象,打开文件 "data.json"
|
|||
|
|
ofs << content.dump(4); // 将 JSON 内容以字符串形式(带4空格缩进)写入文件
|
|||
|
|
ofs.close(); // 关闭文件
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
return -1;
|
|||
|
|
|
|||
|
|
} catch (const std::exception &e) {
|
|||
|
|
throw;
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool jsonReader(std::string file_path, json &sjson) {
|
|||
|
|
// 1. 创建文件流并打开文件
|
|||
|
|
std::ifstream file(file_path);
|
|||
|
|
if (!file.is_open()) {
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
// 2. 解析JSON数据
|
|||
|
|
try {
|
|||
|
|
file >> sjson; // 方式1: 直接使用流操作符解析文件
|
|||
|
|
// 也可以使用显式解析: jsonData = json::parse(file);
|
|||
|
|
} catch (const std::exception &e) {
|
|||
|
|
file.close();
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
// 3. 关闭文件
|
|||
|
|
file.close();
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
bool create_path(std::string path) {
|
|||
|
|
try {
|
|||
|
|
// 检查路径是否存在
|
|||
|
|
if (!fs::exists(path)) {
|
|||
|
|
// 递归创建所有不存在的目录
|
|||
|
|
return fs::create_directories(path);
|
|||
|
|
}
|
|||
|
|
} catch (const fs::filesystem_error &e) {
|
|||
|
|
// 捕获并输出文件系统操作中的异常
|
|||
|
|
throw;
|
|||
|
|
return false; // 返回非零值表示错误
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool is_file_exists(std::string file_path){
|
|||
|
|
return fs::exists(file_path);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
} // namespace UtilityTools
|