我正在尝试在cpp中找到允许的最大系统日期,但我找不到这样做的功能......
任何人都可以帮助我吗?
答案 0 :(得分:6)
使用localtime
功能。从0
到numeric_limits<time_t>::max()
传递给它的值。对于不可接受的值,此函数将返回空指针。您可以使用二进制搜索算法更快地找到合适的值:O(log 2 N)其中N = numeric_limits<time_t>::max()
。
以下示例使用boost库,但它仍然与平台无关。如果不需要STL,你可以实现相同的功能。如果需要,你可以提升。
#include <iostream>
#include <time.h>
#include <limits>
#include <algorithm>
#include <boost/iterator/counting_iterator.hpp>
using namespace std;
using namespace boost;
bool less_time( time_t val1, time_t val2 )
{
tm* v1 = localtime( &val1 );
tm* v2 = localtime( &val2 );
if ( v1 && v2 ) return false;
if ( !v1 && !v2 ) return false;
if ( v1 && !v2) return true;
return false;
};
int main() {
counting_iterator<time_t> x = upper_bound( counting_iterator<time_t>(0), counting_iterator<time_t>(numeric_limits<time_t>::max()), 0, less_time );
time_t xx = *x;
--xx; // upper_bound gives first invalid value so we use previous one
cout << "Max allowed time is: " << ctime(&xx) << endl;
return 0;
}
答案 1 :(得分:0)
取决于操作系统,我们在这里使用Windows或POSIX兼容吗?