我尝试在
std::string
中有选择地获取当地时间/UTC。
(1) 获取 UTC 的
std::string
可以与 std::format
: 很好地配合
auto utc = std::chrono::system_clock::now();
std::string sTime = std::format("{:%H%M%S}", utc);
(2) 和当地时间:
auto zoned = std::chrono::zoned_time{ "Asia/Seoul", std::chrono::system_clock::now() };
sTime = std::format("{:%H%M%S}", zoned);
但它们有不同的类型。我怎样才能实现这样的功能?
bool b = true;
sTime = std::format("{:%H%M%S}", b? utc : zoned);
zoned_time
有两个吸气剂:
.get_sys_time() // get the utc time
.get_local_time() // get the local time
它可以做到这一点,因为
zoned_time
只是一个保存{time_zone const*, sys_time}
的方便数据结构。如果你向它询问 sys_time
,它只会返回它所拥有的内容。如果您要求它提供 local_time
,它会使用 time_zone
将 sys_time
更改为 local_time
。
如果您格式化
zoned_time
,那么它会格式化当地时间。
所以:
auto zoned = std::chrono::zoned_time{ "Asia/Seoul", std::chrono::system_clock::now() };
std::string sTime;
if (b)
sTime = std::format("{:%H%M%S}", zoned.get_sys_time());
else
sTime = std::format("{:%H%M%S}", zoned);
或者将其包装在一个函数中以实现单行:
auto choose_time = [](bool b, auto zoned)
{
if (b)
return std::format("{:%H%M%S}", zoned.get_sys_time());
return std::format("{:%H%M%S}", zoned);
};
bool b = true;
auto zoned = std::chrono::zoned_time{ "Asia/Seoul", std::chrono::system_clock::now() };
auto sTime = choose_time(b, zoned);