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

jos*_*osh 5 c c++ timezone

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

How*_*ant 7

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

给出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';
}
Run Code Online (Sandbox Code Playgroud)

只为我输出:

2015-08-19 05:25:05.453824 SGT
Run Code Online (Sandbox Code Playgroud)

这给出了当前使用的本地日期,时间和缩写.它基于<chrono>图书馆和IANA时区数据库.

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

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


Mar*_*k B 3

一种实现是获取timeUTC 中的当前时间,然后将TZ环境变量操作为目标时区。然后使用localtime_r转换为该时区的当地时间。