我try 了strftime,它有%z和%Z,但这些都是像+0800和pst这样的输出.我想要更长的名字,比如America/洛杉矶.是否有函数调用来执行此操作?
我try 了strftime,它有%z和%Z,但这些都是像+0800和pst这样的输出.我想要更长的名字,比如America/洛杉矶.是否有函数调用来执行此操作?
在C++20之前,还没有一种标准的方法来实现这一点,即使到那时,也只有最新的MSVC实现了它(GCC即将实现它).
在C++20中,有一个类型std::chrono::time_zone
,它有一个名为name()
的成员函数,它将返回string
,如"America/Los Angeles".
它的用法可能如下:
#include <chrono>
#include <iostream>
int
main()
{
using namespace std;
using namespace std::chrono;
zoned_time local_now{"America/Los_Angeles", system_clock::now()};
cout << local_now << " " << local_now.get_time_zone()->name() << '\n';
}
它只为我输出:
2022-12-31 07:34:41.482431 PST America/Los_Angeles
或者,如果您的计算机的本地时区当前设置为"America/Los Angeles",则zoned_time
的 struct 可能如下所示:
zoned_time local_now{current_zone(), system_clock::now()};
如果您只需要时区名称,而不是当前时间,则可以将其进一步简化为:
cout << current_zone()->name() << '\n';
在C++20之前,我所知道的获得这种功能的唯一方法是使用我的免费、开放源码的C++20 chrono preview library,它可以与C++11/14/17一起工作.