我尝试了 strftime,它有 %z 和 %Z,但这些是 +0800 和 PST 等输出。我想要更长的名称,例如 America/Los_Angeles。有一个函数调用可以做到这一点吗?
在 C++20 之前,还没有一个标准方法可以做到这一点,即使如此,迄今为止也只有最新的 MSVC 实现了它(gcc 正在接近)。
在 C++20 中,有一种类型std::chrono::time_zone有一个名为“America/Los_Angeles”的成员函数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';
}
Run Code Online (Sandbox Code Playgroud)
这只是为我输出:
2022-12-31 07:34:41.482431 PST America/Los_Angeles
Run Code Online (Sandbox Code Playgroud)
或者,如果您计算机的本地时区当前设置为“America/Los_Angeles”,则zoned_time结构可能如下所示:
zoned_time local_now{current_zone(), system_clock::now()};
Run Code Online (Sandbox Code Playgroud)
如果您想要的只是时区名称,而不是当前时间,则可以进一步简化为:
cout << current_zone()->name() << '\n';
Run Code Online (Sandbox Code Playgroud)
在 C++20 之前,我知道获得此类功能的唯一方法是使用我的免费开源C++20 chrono 预览库,该库将与 C++11/14/17 一起使用。
| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |