#include <stdio.h>
#include <stdlib.h>
#define subtime 8
struct time
{
int year;
int month;
int date;
int hour;
int min;
int sec;
};
struct time utc_time={0};
struct time beijing_time={0};
char BDS_year[3]="21";
char BDS_month[3]="12";
char BDS_date[3]="31";
char BDS_hour[3]="21";
char BDS_min[3]="51";
char BDS_sec[3]="31";
void UTC_to_BJtime(struct time *utime,struct time *local);
int main()
{
utc_time.year=atoi(BDS_year);
utc_time.month=atoi(BDS_month);
utc_time.date=atoi(BDS_date);
utc_time.hour=atoi(BDS_hour);
utc_time.min=atoi(BDS_min);
utc_time.sec=atoi(BDS_sec);
UTC_to_BJtime(&utc_time,&beijing_time);
printf("%d,%d,%d,%d,%d,%d",beijing_time.year,beijing_time.month,beijing_time.date,beijing_time.hour,beijing_time.min,beijing_time.sec);
}
void UTC_to_BJtime(struct time *utime,struct time *local)
{
int year,month,day,hour;
int lastday = 0;
int lastlastday = 0;
year = utime->year;
month = utime->month;
day = utime->date;
hour = utime->hour + subtime;
if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){
lastday = 31;
if(month == 3){
if((year%400 == 0)||(year%4 == 0 && year%100 != 0))
lastlastday = 29;
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))
lastday = 29;
else
lastday = 28;
}
if(hour >= 24){
hour -= 24;
day += 1;
if(day > lastday){
day -= lastday;
month += 1;
if(month > 12){
month -= 12;
year += 1;
}
}
}
if(hour < 0){
hour += 24;
day -= 1;
if(day < 1){
day = lastlastday;
month -= 1;
if(month < 1){
month = 12;
year -= 1;
}
}
}
local->year = year;
local->month = month;
local->date = day;
local->hour = hour;
local->min = utime->min;
local->sec = utime->sec;
}