如何获取不同时区的当前时间?例如,我需要知道新加坡的当前时间,因为我的系统设置为 PT 时间。
原文由 josh 发布,翻译遵循 CC BY-SA 4.0 许可协议
一个非常古老的问题的新答案。
给定一个 C++11 或 C++14 编译器,以及 这个时区库,新加坡的当前时间是:
#include "tz.h"
#include <iostream>
int
main()
{
using namespace std::chrono;
std::cout << date::make_zoned("Asia/Singapore", system_clock::now()) << '\n';
}
这只是为我输出:
2015-08-19 05:25:05.453824 SGT
这给出了当前的本地日期、时间和使用的缩写。它基于 <chrono>
库和 IANA 时区数据库。
std::chrono::system_clock::now()
返回 UTC 时区的时间戳。该程序定位“亚洲/新加坡”的时区信息,并将 UTC 时间戳转换为表示该位置的本地时间和当前时区的对。
上述程序独立于计算机的当前时区。
在 C++20 中,您现在可以执行此操作(一旦您的供应商发货):
#include <chrono>
#include <iostream>
int
main()
{
using namespace std::chrono;
std::cout << zoned_time{"Asia/Singapore", system_clock::now()} << '\n';
}
输出:
2015-08-19 05:25:05.453824 SGT
原文由 Howard Hinnant 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
一种实现是使用
time
以 UTC 获取当前时间,然后将TZ
环境变量操作到您的目标时区。然后使用localtime_r
转换为该时区的本地时间。