我的问题非常简单。如何获得菲律宾的UTC偏移量为+8,日本为+9,并将其转换为整数。
任何建议都是很有帮助的。谢谢。
更新
为了进一步说明,我有一个c ++桌面应用程序,我需要在使用应用程序的任何地方自动检测其时区。就像申请将在日本使用一样,将使用日本的时区偏移量。这可能吗?
答案 0 :(得分:2)
如果您不想深入研究特定于Windows的API,可以使用Howard Hinnant's timezone library来实现此功能,并且可能是未来标准的C ++代码 1 。
#include "date/tz.h"
#include <iostream>
int
main()
{
using date::operator<<;
using std::chrono::system_clock;
std::cout << date::current_zone()->get_info(system_clock::now()).offset << '\n';
}
date::current_zone()
检测到计算机的当前本地时区。这将返回指向date::time_zone
的指针,该指针具有名为get_info()
的成员函数。
您可以使用UTC time_point
或local_time
time_point
拨打time_zone::get_info
,以便在指定的时间点获取有关此时区的各种信息(如根据当前政治,信息随时间而变化)。使用system_clock::now()
作为time_point
将获取time_zone
的当前信息。
返回date::sys_info
,这是一个聚合,其中一个成员称为offset
。这是当前的UTC偏移量,单位为std::chrono::seconds
。
这只是我的输出:
-14400s
表示我当前的当地时区是UTC以西14400秒。
对于典型代码,不应该直接在添加UTC偏移的级别编程。有一个更高级别的API可以为您执行此操作。使用更高级别的API可以防止不小心的错误,例如在您应该减去时添加UTC偏移(反之亦然)。但是,这种低级API的存在是因为有时对此类信息的低级访问才能使您的程序高效。
例如,这是一个更高级别的代码,它只打印出当前的本地时间:
std::cout << date::make_zoned(date::current_zone(), system_clock::now()) << '\n';
system_clock::now()
仍然被明确调用,但现在UTC偏移量添加以及对current_zone()->get_info()
的调用都封装在这个更高级别的API下。
1 这个库最近被投票到C ++ 20工作草案中。
答案 1 :(得分:1)
如果std::localtime
在您的操作系统中可以访问时区信息(根据定义,在大多数情况下可以访问),这是我的单行代码:
auto offset_epoch = std::localtime(new time_t(0));
其中offset_epoch->tm_hour
是偏移小时,而offset_epoch->tm_min
是偏移分钟。您可以放心地忽略offset_epoch->tm_hour
,因为它的值为70
。
到目前为止对我来说还不错。