Advertisement

时间同步之 UTC时间转换为本地时间函数

阅读量:

// UTC时间转换为本地时间函数

静态函数UTCtoLocalTime接收五个整型参数:所在时区、年指针、月指针、日指针和小时指针。

{

int year,month,day,hour;

int lastday = 0; // 月的最后一天的日期

int lastlastday = 0; // 上月的最后一天的日期

year = *p_year; //已知的UTC时间

month = *p_month; //已知的UTC时间

day = *p_day; //已知的UTC时间

hour = *p_hour + timezone; //已知的UTC时间,默认时区+8

if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)

{

lastday = 31;

if(month == 3)

{

如果(year能够被4或1ooo完全整除)或者( (year能够被4完全整除)且(year不能够同时被1oo完全整除)) )//判定某一年是否是闰年

lastlastday = 29;// 闰年的2月为29天,平年为28天

else

lastlastday = 28;

}

if(month == 8)

lastlastday = 31;

}

else if(month == 4 || month == 6 || month == 9 || month == 11){

lastday = 30;

lastlastday = 31;

}

else{

lastlastday = 31;

if((year%400 == 0)||(year%4 == 0 && year%100 != 0))// 闰年的2月为29天,平年为28天

lastday = 29;

else

lastday = 28;

}

if(hour >= 24)

{// 当算出的区时大于或等于24:00时,应减去24:00,日期加一天

hour -= 24;

day += 1;

if(day > lastday){ // 应减去该月最后一天的日期,并将月份增加一个月

day -= lastday;

month += 1;

if(month > 12){// 当算出的月份大于12时,应减去12,年份加上一年

month -= 12;

year += 1;

}

}

}

if(hour < 0)// 当算出的区时为负数时,应加上24:00,日期减一天

{

hour += 24;

day -= 1;

if(day < 1)// 当算出的日期为0时,日期变为上一月的最后一天,月份减去一个月

{

day = lastlastday;

month -= 1;

if(month < 1)

{ // 当算出的月份为0时,月份变为12月,年份减去一年

month = 12;

year -= 1;

}

}

}

//得到转换后的本地时间

*p_year = year;

*p_month = month;

*p_day = day;

*p_hour = hour;

}


全部评论 (0)

还没有任何评论哟~