gpt4 book ai didi

c++ - 如何使用 Windows 操作系统在 C++ 中获取 UTC 时间偏移

转载 作者:行者123 更新时间:2023-11-30 03:23:40 28 4
gpt4 key购买 nike

我的问题很简单。如何获得菲律宾的 UTC 偏移量(+8)和日本的偏移量(+9),并将其转换为整数。

任何建议都是很大的帮助。谢谢。

更新

为了进一步说明,我有一个 c++ 桌面应用程序,我需要在使用该应用程序的任何地方自动检测它的时区。就像在日本使用该应用程序一样,将使用日本的时区偏移量。这可能吗?

最佳答案

如果您不想深入研究特定于 Windows 的 API,这里是可移植的,C++20 标准的 C++ 代码1 使用 Howard Hinnant's timezone library 执行此操作.

#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() 的成员函数。

您可以调用time_zone::get_info使用 UTC time_pointlocal_time time_point 获取指定时间点有关该时区的各种信息(作为信息根据当前政治随时间变化)。使用 system_clock::now() 作为 time_point 将获取 time_zone 的当前信息。

A 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 的 namespace std::chrono 中:http://eel.is/c++draft/time.zone.db.access#8

关于c++ - 如何使用 Windows 操作系统在 C++ 中获取 UTC 时间偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50228459/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com