【发布时间】:2015-11-02 12:16:14
【问题描述】:
在this answer中我提议marihikari使用mktime的标准功能,而不是尝试实现自己的公历系统。
我编写了这个函数来演示如何使用mktime 来完成这个:
bool leap_year(int year) {
tm bar = { 0, 0, 0, 29, 1, year - 1900 };
mktime(&bar);
return bar.tm_mday == 29 && bar.tm_mon == 1 && bar.tm_year == year - 1900;
}
对此进行测试:
cout << "2000: " << leap_year(2000) << "\n2001: " << leap_year(2001) << "\n2004: " << leap_year(2004) << "\n1900: " << leap_year(1900) << "\n2100: " << leap_year(2100) << endl;
在Clang 3.7.0 中产生了正确的结果:
2000: 1
2001: 0
2004: 1
1900:0
2100: 0
但是gcc 5.1.0的结果不正确:
2000: 1
2001: 0
2004: 1
1900:1
2100:1
Visual Studio 2015 中的结果不正确:
2000: 1
2001: 0
2004: 1
1900:1
2100: 0
我认为这是 gcc 5.1.0 和 Visual Studio 2015 中的错误?
【问题讨论】:
标签: c++ visual-studio gcc clang mktime