【发布时间】:2010-07-27 20:47:40
【问题描述】:
如何获取不同时区的当前时间?例如,我需要知道新加坡的当前时间,因为我的系统设置为 PT 时间。
【问题讨论】:
如何获取不同时区的当前时间?例如,我需要知道新加坡的当前时间,因为我的系统设置为 PT 时间。
【问题讨论】:
一个非常老的问题的新答案。
给定一个 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 SGT
【讨论】:
一种实现方式是使用time 以UTC 格式获取当前时间,然后将TZ 环境变量操作到您的目标时区。然后使用localtime_r 转换为该时区的本地时间。
【讨论】:
尽可能使用 UTC (GMT)。
如果您需要(例如)打印一份前往另一个时区的报告,请使用 SystemTimeToTzSpecificLocalTime() 之类的内容对其进行本地化。
【讨论】:
您可以转换为 GMT,然后转换为您想要的任何时区。
【讨论】: