- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试更正一个非常奇怪的时间戳类。它要做的是在构建时获取当前时间或者以字符串形式传递的时间。
我只想使用 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/
我正在转换一个只能在 Windows 机器上编译的 C++ 项目,因为它使用 Microsoft C++ 库。 _get_timezone 函数是否有任何替代方案,可在 Ubuntu 12.10 机器
我正在尝试更正一个非常奇怪的时间戳类。它要做的是在构建时获取当前时间或者以字符串形式传递的时间。 我只想使用 UTC,因为这些日期并没有真正显示在任何地方,而是一个时间戳与另一个时间戳之间的区别。 在
我是一名优秀的程序员,十分优秀!