gpt4 book ai didi

c++ - _get_timezone 如何工作?

转载 作者:太空狗 更新时间:2023-10-29 23:06:38 43 4
gpt4 key购买 nike

我正在尝试更正一个非常奇怪的时间戳类。它要做的是在构建时获取当前时间或者以字符串形式传递的时间。

我只想使用 UTC,因为这些日期并没有真正显示在任何地方,而是一个时间戳与另一个时间戳之间的区别。

在任何情况下,我都会调用 strptime(timestamp, m_format.c_str(), &time); 从字符串中获取 tm 时间。这个字符串是 UTC 时间所以如果我想调用 mktime 来获取时间作为 time_t 我必须用当前时区修改它所以我这样做 time.tm_hour-=tz/3600 其中 tz 是通过调用 _get_timezone 检索的。问题是这个函数似乎返回 28800,这是默认值,但如果我稍后在代码中调用它,它会返回 -7200,这是正确的值。

我需要做些什么来初始化这个值吗?我们有一个很大的代码库,我不知道中间发生的一切。

此外,如果有人有指向类似类(class)的链接,我将非常感激,因为我可能会在那里注意到我的错误。

谢谢。

最佳答案

_get_timezone() 在其他调用 _tzset() 之前返回 Redmond 默认值 28800(太平洋标准时间)。 _tzset() 将被许多基于时间的函数隐式调用(然而,localtime/mkttime 似乎不会调用它)。

我也遇到了一个问题,它没有被初始化,或者被初始化,然后翻转回 28800,然后再次初始化。我决定完全避免它。

这是我用来获取 Windows 信息的机制。这不会在 _get_timezone 中遭受明显的初始化竞争:

TIME_ZONE_INFORMATION tz;
DWORD rc = ::GetTimeZoneInformation(&tz);
offset_minutes = tz.Bias + (TIME_ZONE_ID_DAYLIGHT != rc ? tz.StandardBias : tz.DaylightBias);
offset_seconds = offset_minutes * 60;

关于c++ - _get_timezone 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15054072/

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