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

新手上路,请多包涵

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

原文由 josh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

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

原文由 Mark B 发布,翻译遵循 CC BY-SA 2.5 许可协议

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

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

在 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题