【问题标题】:Getting current time of a different timezone using C++使用 C++ 获取不同时区的当前时间
【发布时间】:2010-07-27 20:47:40
【问题描述】:

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

【问题讨论】:

    标签: c++ c timezone


    【解决方案1】:

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

    给定一个 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
    

    这给出了当前使用的本地日期、时间和缩写。它基于&lt;chrono&gt; 库和IANA timezone database

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

    上述程序与计算机当前时区无关。

    C++20 更新

    在 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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        尽可能使用 UTC (GMT)。

        如果您需要(例如)打印一份前往另一个时区的报告,请使用 SystemTimeToTzSpecificLocalTime() 之类的内容对其进行本地化。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • 格林威治标准时间是要走的路。 (我在美国对某人讲话,所以这与我的时区无关。)
          • 如何处理夏令时(PDT/PST)?
          • 如果您想要更具体的答案,您将不得不提供更多的上下文。你的操作系统是什么?平台?图书馆集?
          猜你喜欢
          • 2015-03-23
          • 2017-09-18
          • 2018-09-08
          • 1970-01-01
          • 1970-01-01
          • 2011-07-08
          • 1970-01-01
          • 2017-06-07
          • 2017-04-30
          相关资源
          最近更新 更多