为什么_localtime32和_gmtime32为非 GMT 时区返回相同的时间值
Why is it that _localtime32 and _gmtime32 return the same time value for a non-GMT time zone?
我的时区在控制面板日期/时间小程序中设置为CDT
。
以下代码将完全相同的日期和时间放入pCurGmtTime
和pCurTime
中:
int main(int argc, char *argv[])
{
__time32_t t=_time32(NULL);
tm *pCurGmtTime=_gmtime32(&t);
tm *pCurTime=_localtime32(&t);
// The values in the *pCurGmtTime structure are equal to the values in *pCurTime
return 0;
}
我没有设置TZ
环境变量,但我的时区已通过控制面板日期和时间小程序为系统正确配置。此行为似乎违背了这些函数的 MSDN 文档,该文档指出TZ
会覆盖控制面板设置,但如果不存在,则将使用控制面板设置。
谢谢
因为这两个调用返回的指针指向相同的内部结构:
http://msdn.microsoft.com/en-us/library/bf12f0hc(v=vs.80(.aspx
32 位和 64 位版本的 gmtime、mktime、mkgmtime 和 localtime 都为每个线程使用单个 tm 结构进行转换。每次调用其中一个例程都会销毁上一个调用的结果。
您的第二次调用 ( _localtime32()
( 将覆盖第一次调用的值。如果要比较指针值本身,您会发现它们是相同的。
如果您使用文档顶部所述的_s
版本,则不会遇到该问题,因为您必须通过自己的struct *tm
。
因为
32 位和 64 位版本的 gmtime、mktime、mkgmtime 和 localtime 都为每个线程使用单个 tm 结构进行转换。
第二个调用将数据写入与前一个调用相同的位置。在调用 localtime
之前,您需要将数据复制到其他地方。
相关文章:
- 如果返回 -1,时间() 的参数是否被修改?
- 为什么在尝试测量函数返回所需的时间时,我的运行时编号是错误的?
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- 为什么时间测量有时会返回重复值(15.625ms 的倍数)?
- 解决PNP在一段时间后返回坏的rvec和tvec
- GetCurrentTime() 不返回正确的时间
- C++ Poco SQL 查询不返回具有'between'和'and'日期时间绑定的结果
- 特征:返回对具有编译时间尺寸检查的矩阵块的引用
- C 将NTP服务器返回的时间转换为字符串
- C 函数在编译时间返回类型
- 如何从一段时间返回继续
- system_clock返回负时间 C++
- 将返回 CPU 时间提升为 0
- 长时间返回错误的数据
- vector::size() 如何在常量时间内返回向量的大小
- C++/如何返回最佳时间结果
- 在添加或减少天数后提升日期时间返回值
- c++系统时间返回相同的错误值
- 根据当前时间返回下一秒