我认为,如果在不同的语言环境中,该程序应该产生不同的结果:
#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
即结果只会随着时间的变化而改变。
我该怎么做才能在适当的区域设置中实际看到结果变化?
尝试:
cout << std::format(locale(argv[2]), "{:%X %x %a %b %c %p %r}", znow) << std::endl;