在调用date::make_zoned()
之前获取当前时区信息,然后使用获取的时区信息构造一个date::time_zone
对象,最后将其传递给date::make_zoned()
。这样可以避免网络调用,提高程序的效率。
代码示例:
// 获取当前时区信息
std::string zone_name{std::getenv("TZ") ? std::getenv("TZ") : ""};
if (zone_name.empty()) {
// 如果环境变量 TZ 不存在,则使用系统默认时区
std::time_t now{std::time(nullptr)};
std::tm local_tm{*std::localtime(&now)};
zone_name = date::get_tzdb().time_zone_from_local(local_tm).name();
}
// 构造 time_zone 对象
date::time_zone tz{zone_name};
// 调用 make_zoned()
auto zt = date::make_zoned(tz, std::chrono::system_clock::now());