Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ COleDateTime在使用time\u t构造时添加一小时_C++_Systemtime_Coledatetime - Fatal编程技术网

C++ COleDateTime在使用time\u t构造时添加一小时

C++ COleDateTime在使用time\u t构造时添加一小时,c++,systemtime,coledatetime,C++,Systemtime,Coledatetime,我有一个struct tm对象,它使用mktime转换为UNIX时间,当传递到COleDateTime的构造函数中时,它似乎增加了一个小时来计算夏令时(英国时间),尽管COleDateTime的文档表明它忽略了DST 如果我使用SYSTEMTIME创建时间,并将该对象传递给COleDateTime则问题消失。有人知道为什么会这样吗?这是来自遗留代码,因此将所有内容更改为SYSTEMTIME可能不是一个解决方案 下面是我的示例代码: timeinfo.tm_year = 2018 - 1900;

我有一个
struct tm
对象,它使用
mktime
转换为UNIX时间,当传递到
COleDateTime
的构造函数中时,它似乎增加了一个小时来计算夏令时(英国时间),尽管
COleDateTime
的文档表明它忽略了DST

如果我使用
SYSTEMTIME
创建时间,并将该对象传递给
COleDateTime
则问题消失。有人知道为什么会这样吗?这是来自遗留代码,因此将所有内容更改为
SYSTEMTIME
可能不是一个解决方案

下面是我的示例代码:

timeinfo.tm_year = 2018 - 1900;
timeinfo.tm_mon = 6 - 1;
timeinfo.tm_mday = 1;
timeinfo.tm_isdst = 0;
timeinfo.tm_hour = 10;
timeinfo.tm_min = 30;
timeinfo.tm_sec = 40;

auto unix = mktime( &timeinfo );
printf("UNIX time %lld\n", unix);
COleDateTime date(unix);
printf("COleDateTime: %f\n", date.m_dt);
CString res = date.Format();
printf("Formatted: %ls\n", res.GetString());

回答了我自己的问题:

COleDateTime
time\u t
构造函数在内部使用
CTime
,无论
COleDateTime
的文档中说了什么,它都会考虑区域设置和时区的环境变量