更大年份的不正确的纪元unix时间值(2048)

时间:2013-02-13 09:25:41

标签: c++ unix

我需要获得日期和时间输入的纪元时间,但是当我输入2048(年)时,我的价值非常大,“18446744073709551615”,这应该是不正确的..

当我输入像2012(年),2015(年)这样的日期时,它的纪元值是正确的,我需要为2048(年)做的任何更改

time_t get_unix_time(int,int,int,int,int,int,int);
int main()
{
unsigned long long m_process_date;
m_process_date = get_unix_time (12,31,2048,23,59,58,-1);
std::cout<<"\n m_process_date:"<< m_process_date<<std::endl;
return 1;
}


time_t get_unix_time(   int         month,
                        int         day,
                        int         year,
                        int         hour,
                        int         minute,
                        int         second,
                        int         dst )
{
    tm          ts;

    ts.tm_mon = month - 1;
    ts.tm_mday = day;

    if( year < 100 )
        ts.tm_year = year + 100;
    else
        ts.tm_year = year - 1900;

    ts.tm_hour = hour;
    ts.tm_min = minute;
    ts.tm_sec = second;
    ts.tm_isdst = dst;

    return mktime( &ts );
}

1 个答案:

答案 0 :(得分:2)

标准Unix时间存储在signed int中。这是正常的32位,但可能因实现而有所不同(一些新实现将time_t存储为带符号的64位int)。

因此,对于32位signed int,这意味着最大可表示日期为Jan 19, 2038