是否可以从zoned_time获取time_point?

问题描述 投票:0回答:1

我尝试在

std::string
中有选择地获取当地时间/UTC。

  1. 我尝试过的:

(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);
  1. 我想要实现的目标:

但它们有不同的类型。我怎样才能实现这样的功能?

bool b = true;
sTime = std::format("{:%H%M%S}", b? utc : zoned);
c++ c++11 c++-chrono
1个回答
0
投票

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);
© www.soinside.com 2019 - 2024. All rights reserved.