本文介绍了mktime只处理闰年?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在中,我提议使用:

但在中出现错误的结果:

But an incorrect result in gcc 5.1.0:

并且:

我假设这是gcc 5.1.0和Visual Studio 2015中的错误?

I assume this is a bug in gcc 5.1.0 and Visual Studio 2015?

推荐答案

mktime 会将所有时间范围更新为适当的范围。 return:

mktime will return:

实现必须做出什么努力来转换 tm 。因此只要时间被转换 static_cast< time_t>( - 1) / code>已填写。

It is not specified however what efforts the implementation must make to convert the tm. So as long as the time is converted or static_cast<time_t>(-1) is returned the requirements for mktime have been filled.

意味着以下函数将在所有平台上正确支持 mktime

bool leap_year(int year) {
    tm bar = { 0, 0, 0, 29, 1, year - 1900 };

    return static_cast<time_t>(-1) != mktime(&bar) && bar.tm_mday == 29 && bar.tm_mon == 1 && bar.tm_year == year - 1900;
}

这篇关于mktime只处理闰年?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!