使用C ++获取不同时区的当前时间

我如何获得不同时区的当前时间? 例如,我需要知道新加坡的当前时间,因为我的系统设置为PT时间。

一种实现方式是使用time以UTC TZ获取当前时间,然后将TZ环境变量操作到目标时区。 然后使用localtime_r转换为该时区的本地时间。

一个非常古老的问题的新答案。

给出C ++ 11或C ++ 14编译器和此时区库 ,新加坡当前时间是:

 #include "tz.h" #include  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 

这给出了当前使用的本地日期,时间和缩写。 它基于库和IANA时区数据库 。

std::chrono::system_clock::now()返回UTC时区的时间戳。 该程序查找“亚洲/新加坡”的时区信息,并将UTC时间戳转换为表示该位置的当地时间和当前时区的对。

上述程序独立于计算机的当前时区。

尽可能使用UTC(GMT)。

如果您需要(例如)打印要转到另一个时区的报表,请使用类似SystemTimeToTzSpecificLocalTime()的内容对其进行本地化。

您可以转换为GMT,然后转换为您想要的任何时区。