c++ - 使 CTime 和 CTimeSpan 忽略夏令时

标签 c++ mfc dst ctime

我正在使用 CTime 和 CTimeSpan 并用它做简单的算术运算。在某些时候我正在做类似的事情

...
CTime someTime;
CTimeSpan oneDay(1,0,0,0);
return someTime + oneDay;

现在,如果 someTime 在夏令时期间并且返回值不是(反之亦然),此操作将增加 23 小时(或分别为 25 小时),这是绝对正确的。无论如何,我需要的是完全忽略夏令时。我希望结果与求和运算之前的日期相同。

解决此问题的一种方法是检查这些情况并相应地更正结果。但我想知道是否有办法完全禁用夏令时功能。

最佳答案

我最终使用 CTime::GetLocalTm(...) 自行更正了它。

tm myTm;
original.GetLocalTm(&myTm);
BOOL bWasDST = (myTm.tm_isdst != 0);

result.GetLocalTm(&myTm);
BOOL bIsDST = (myTm.tm_isdst != 0);

if ((bWasDST - bIsDST) != 0)
{
    CTimeSpan dstCorrection(0, bWasDST - bIsDST, 0, 0);
    result += dstCorrection;
}

关于c++ - 使 CTime 和 CTimeSpan 忽略夏令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25030709/

相关文章:

c++ - 面试题

c++ - 模板函数定义的编译错误

c++ - pgm 二进制文件操作中的图像失真

C++ std::localtime 夏令时规则 (dst) 欧洲与美国

java - 1° 夏令时 Java 和 JS 表现出不同的行为

c++ - 在 OpenGL 着色器中按位执行还是在 C++ 中预先执行比较快?

c++ - 使用 wcsncpy_s 复制字符串时缓冲区太小

.net - 对 .NET Framework 的不需要的依赖

visual-c++ - 如何在 MFC 应用程序中获取命令行参数?

夏令时更改期间的 Java Calendar.roll 和 CST