如何获取std::formatter<std::chrono::zoned_time>的值来重复使用?

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

如何获取

std::formatter<std::chrono::zoned_time>
的值来重复使用?

我需要能够重复使用相同的格式字符串来格式化时间。我似乎不知道如何为此保留

std::formatter
实例。维基百科表明,这通常不是已完成的事情:

std::formatter 特化通常不直接访问,而是通过格式化函数使用。

那么,没有黑客就可以吗?

c++ c++-chrono
1个回答
0
投票

如果您唯一的需求是“能够使用相同的格式字符串重复格式化时间”,您可以只使用格式构造一个格式字符串然后存储它,并每次使用

std::vformat
进行
zoned_time
格式化:

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

using namespace std::literals;

int main() {
    auto date_fmt = "%D"s;
    auto runtime_fmt = std::format("{{:{}}}\n", date_fmt);
    auto time = std::chrono::zoned_time{};
    auto ret = std::vformat(runtime_fmt, std::make_format_args(time));
    std::print("{}", ret);
}

https://godbolt.org/z/9T63b1Efe

不需要存储

std::formatter
,通常它们是通过直接使用格式化参数的格式化函数来构造的。

© www.soinside.com 2019 - 2024. All rights reserved.