在this answer我建議marihikari使用標準功能mktime
,而不是試圖實現自己的公曆系統。mktime只處理Clang的閏年?
我寫了這個功能演示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中的錯誤?