代码之家  ›  专栏  ›  技术社区  ›  josh

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

  •  4
  • josh  · 技术社区  · 14 年前

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

    4 回复  |  直到 14 年前
        1
  •  3
  •   Mark B    14 年前

    一种实现是使用 time 以UTC为单位获取当前时间,然后操纵 TZ 目标时区的环境变量。然后使用 localtime_r

        2
  •  12
  •   Howard Hinnant    4 年前

    给出了C++ 11或C++ 14编译器,以及 this timezone library ,新加坡的当前时间是:

    #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 timezone database .

    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新加坡元
    
        3
  •  1
  •   Sliq    14 年前

    尽可能使用UTC(GMT)。

    如果您需要(例如)打印一个要转到另一个时区的报告,请使用 SystemTimeToTzSpecificLocalTime()

        4
  •  0
  •   nmichaels    14 年前

    你可以转换成GMT,然后再转换成你想要的任何时区。