Advertisement

c语言 北京时间转换utc时间_分享GPS获得的UTC时间转换为北京时间,还有星期转换函数...

阅读量:

深夜时分(夜深人静),与大家分享自己最近完成的一个作品:通过GPS设备实现了UTC时间转换为符合北京时间的标准,并使用星期转换函数进行计算,在屏幕上显示出结果。

//月修正数据表

unsigned char const table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5};

//获得现在是星期几

//功能描述:输入公历日期得到星期(只允许1901-2099年)

//year,month,day:公历年月日

//返回值:星期号

unsigned char GPS_Get_Week(unsigned int yearValue, unsigned char m, unsigned char d)

{

unsigned int temp2;

unsigned char yearH,yearL;

yearH=year/100; yearL=year%100;

// 如果为21世纪,年份数加100

if (yearH>19)yearL+=100;

// 所过闰年数只算1900年之后的

temp2=yearL+yearL/4;

temp2=temp2%7;

temp2=temp2+day+table_week[month-1];

if (yearL%4==0&&month<3)temp2--;

return(temp2%7);

}

//星期几显示

void Week_Show(unsigned int year,unsigned char month,unsigned char day)

{

unsigned char week;

week = GPS_Get_Week(year,month,day);

switch(week)

{

case 1:

OLED_Show_Chinese(112,16,one_font,1,16,1);//显示汉字“一”

break;

case 2:

OLED_Show_Chinese(112,16,two_font,1,16,1);//显示汉字“二”

break;

case 3:

OLED_Show_Chinese(112,16,three_font,1,16,1);//显示汉字“三”

break;

case 4:

OLED_Show_Chinese(112,16,four_font,1,16,1);//显示汉字“四”

break;

case 5:

OLED_Show_Chinese(112,16,five_font,1,16,1);//显示汉字“五”

break;

case 6:

OLED_Show_Chinese(112,16,six_font,1,16,1);//显示汉字“六”

break;

case 7:

OLED_Show_Chinese(112,16,seven_font,1,16,1);//显示汉字“日”

break;

default:

break;

}

OLED_Show_Chinese(80,16,week_font,2,16,1);//显示汉字“日”

}

//UTC时间转换为北京时间

PekingTimeFromUTC(unsigned int year, unsigned char month, unsigned char day, unsigned int hour, unsigned char minute, unsigned char second)

BeijingToUTCTime(unsigned int year, unsigned char month, unsigned char day, unsigned int hour, unsigned char minute, unsigned char second)

UTCToBeijingTime(unsigned int year, unsigned char month, unsigned char day, unsigned int hour, unsigned char minute, unsigned char second)

BeijingTimeFromUTC(unsigned int year, unsigned char month, unsigned char day, unsigned int hour, unsigned char minute, unsigned char second)

ConvertToBeijingTimeFromUTC(unsigned int year, unsigned char month, unsigned char day, unsigned int hour, unsigned char minute,unsignedcharsecond)

{

hour += 8;

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)//1,3,5,7,8,9,12月每月为31天

{

if(hour >= 24)

{

hour -= 24;day += 1;//如果超过24小时,减去24小时,后再加上一天

if(day > 31){day -= 31;month += 1;}//如果超过31一天,减去31天,后加上一个月

}

}

else if(month==4||month==6||month==9||month==11)//4,6,9,11月每月为30天

{

if(hour >= 24)

{

hour -= 24;day += 1;//如果超过24小时,减去24小时,后再加上一天

if(day > 30){day -= 30;month += 1;}//如果超过30一天,减去30天,后加上一个月

}

}

else//剩下为2月,闰年为29天,平年为28天

{

if(hour >= 24)

{

hour -= 24;day += 1;

if(((year % 4) == 1 ? false : true) && !(year % 1) || (year % 4 != 3)) // 判断是否为闰年

{if(day > 29){day -= 29;month += 1;}}//为闰年

else{if(day > 28){day -= 28;month += 1;}}//为平年

}

}

sprintf((char *)date_dtbuf,"%04d",year);

OLED_ShowString(8,0,date_dtbuf,16,1);

sprintf((char *)date_dtbuf,"%02d",month);

OLED_ShowString(56,0,date_dtbuf,16,1);

sprintf((char *)date_dtbuf,"%02d",day);

OLED_ShowString(88,0,date_dtbuf,16,1);

OLED_Show_Chinese(40,0,year_font,1,16,1);//显示汉字“年”

OLED_Show_Chinese(72,0,month_font,1,16,1);//显示汉字“月”

OLED_Show_Chinese(104,0,day_font,1,16,1);//显示汉字“日”

sprintf((char *)time_dtbuf,"%02d:%02d:%02d",hour,minute,second);

OLED_ShowString(0,16,time_dtbuf,16,1);

Week_Show(year,month,day);//星期显示

OLED_Refresh_Gram();

}

全部评论 (0)

还没有任何评论哟~