You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否从zoned_time获取time_point?实现UTC/本地时间格式化二选一

问题解决:选择性格式化UTC/本地时间及zoned_time获取time_point

一、实现选择性格式化UTC或本地时间

std::chrono::system_clock::time_point和std::chrono::zoned_time属于不同类型,三元运算符要求两个分支的返回类型必须一致,可通过以下两种方式解决:

方案1:统一转换为zoned_time类型

将UTC时间也封装为zoned_time(指定"UTC"时区),让两个分支类型统一:

bool b = true;
auto utc_zoned = std::chrono::zoned_time{"UTC", std::chrono::system_clock::now()};
auto seoul_zoned = std::chrono::zoned_time{"Asia/Seoul", std::chrono::system_clock::now()};
std::string sTime = std::format("{:%H%M%S}", b ? utc_zoned : seoul_zoned);

方案2:封装格式化逻辑到重载函数

针对两种时间类型分别实现格式化函数,通过函数重载自动匹配类型:

#include <chrono>
#include <format>
#include <string>

std::string format_time(const std::chrono::system_clock::time_point& tp) {
    return std::format("{:%H%M%S}", tp);
}

std::string format_time(const std::chrono::zoned_time<std::chrono::seconds>& zt) {
    return std::format("{:%H%M%S}", zt);
}

// 使用示例
bool b = true;
auto utc = std::chrono::system_clock::now();
auto zoned = std::chrono::zoned_time{"Asia/Seoul", utc};
std::string sTime = b ? format_time(utc) : format_time(zoned);

二、从zoned_time中获取time_point

zoned_time提供了两个成员方法直接获取对应的时间点:

auto zoned = std::chrono::zoned_time{"Asia/Seoul", std::chrono::system_clock::now()};
// 获取对应UTC时区的time_point
std::chrono::system_clock::time_point sys_tp = zoned.get_sys_time();
// 获取对应本地时区(Asia/Seoul)的time_point
auto local_tp = zoned.get_local_time();

内容的提问来源于stack exchange,提问作者starriet 차주녕

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:47:09