在c ++中如何找到最大系统日期?

时间:2009-07-28 10:46:03

标签: c++ date time

我正在尝试在cpp中找到允许的最大系统日期,但我找不到这样做的功能......

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:6)

使用localtime功能。从0numeric_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兼容吗?