localtime_r的实现

来源:互联网 发布:java 微信发送消息 编辑:程序博客网 时间:2024/04/27 04:42

在ubuntu14.10 64位上测试通过

#include <stdio.h>#include <time.h>#include <stdlib.h>#include <fstream>#include <string>#include <iostream>#include <sstream> //要使用stringstream流应包含此头文件//my_localtime_r转自(http://blog.csdn.net/yaxf999/article/details/8136712)struct tm * my_localtime_r(const time_t *srctime,struct tm *tm_time){    long int n32_Pass4year,n32_hpery;    // 每个月的天数  非闰年    const static char Days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};    // 一年的小时数    const static int ONE_YEAR_HOURS = 8760; // 365 * 24 (非闰年)    //计算时差8*60*60 固定北京时间    time_t time = *srctime;    time=time+28800;    tm_time->tm_isdst=0;    if(time < 0)    {    time = 0;    }    //取秒时间    tm_time->tm_sec=(int)(time % 60);    time /= 60;    //取分钟时间    tm_time->tm_min=(int)(time % 60);    time /= 60;    //计算星期    tm_time->tm_wday=(time/24+4)%7;    //取过去多少个四年,每四年有 1461*24 小时    n32_Pass4year=((unsigned int)time / (1461L * 24L));    //计算年份    tm_time->tm_year=(n32_Pass4year << 2)+70;    //四年中剩下的小时数    time %= 1461L * 24L;    //计算在这一年的天数    tm_time->tm_yday=(time/24)%365;    //校正闰年影响的年份,计算一年中剩下的小时数    for (;;)    {        //一年的小时数        n32_hpery = ONE_YEAR_HOURS;        //判断闰年        if ((tm_time->tm_year & 3) == 0)        {            //是闰年,一年则多24小时,即一天            n32_hpery += 24;        }        if (time < n32_hpery)        {            break;        }        tm_time->tm_year++;        time -= n32_hpery;    }    //小时数    tm_time->tm_hour=(int)(time % 24);    //一年中剩下的天数    time /= 24;    //假定为闰年    time++;    //校正润年的误差,计算月份,日期    if ((tm_time->tm_year & 3) == 0)    {        if (time > 60)        {            time--;        }        else        {            if (time == 60)            {                tm_time->tm_mon = 1;                tm_time->tm_mday = 29;                return tm_time;            }        }    }    //计算月日    for (tm_time->tm_mon = 0;Days[tm_time->tm_mon] < time;tm_time->tm_mon++)    {        time -= Days[tm_time->tm_mon];    }    tm_time->tm_mday = (int)(time);    return tm_time;}int main(){    char tmp[25] = {0};     time_t tt = time(NULL);//这句返回的只是一个时间cuo     cout<<"time: "<<tt<<endl;     tm t;     my_localtime_r(&tt,&t);     sprintf(tmp,"%d-%02d-%02d %02d:%02d:%02d\t",          t.tm_year + 1900,          t.tm_mon + 1,          t.tm_mday,          t.tm_hour,          t.tm_min,          t.tm_sec);    cout<<tmp<<endl;    return 0;}
0 0
原创粉丝点击