为什么我不能让 C++ 日期格式在不同区域设置中有所不同?

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

我认为,如果在不同的语言环境中,该程序应该产生不同的结果:

#include <chrono>
#include <iostream>
#include <locale>

using namespace std;

int main(int, char *argv[]) {
    auto now = chrono::system_clock::now();

    auto znow = chrono::zoned_time{argv[1], now};

    locale::global(locale(argv[2]));

    // These are all the locale-specific format specifiers I could find.
    cout << std::format("{:%X %x %a %b %c %p %r}", znow) << std::endl;
}

(例如参见这个

但是,它似乎没有(我在运行它的机器上安装了 885 个语言环境):

$ for locale in $(locale -a); do ./locale-time "Europe/London" ${locale}; done | sort | uniq
14:51:04 10/21/24 Mon Oct Mon Oct 21 14:51:04 2024 PM 02:51:04 PM
14:51:05 10/21/24 Mon Oct Mon Oct 21 14:51:05 2024 PM 02:51:05 PM
14:51:06 10/21/24 Mon Oct Mon Oct 21 14:51:06 2024 PM 02:51:06 PM
14:51:07 10/21/24 Mon Oct Mon Oct 21 14:51:07 2024 PM 02:51:07 PM
14:51:08 10/21/24 Mon Oct Mon Oct 21 14:51:08 2024 PM 02:51:08 PM
14:51:09 10/21/24 Mon Oct Mon Oct 21 14:51:09 2024 PM 02:51:09 PM

即结果只会随着时间的变化而改变。

我该怎么做才能在适当的区域设置中实际看到结果变化?

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

尝试:

cout << std::format(locale(argv[2]), "{:%X %x %a %b %c %p %r}", znow) << std::endl;
© www.soinside.com 2019 - 2024. All rights reserved.