Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 392 | Accepted: 96 |
Description
UT -0000 GMT -0000 EDT -0400 CDT -0500 MDT -0600 PDT -0700
Input
Output
Sample Input
SUN, 03 DEC 1996 09:10:35 GMT
Sample Output
SUN, 03 DEC 1996 12:10:35 +0300
Source
//木有AC,可能是题意理解的不好。
#include
#include
#include
#include
using namespace std;
const char w[7][20]= {"SUN","MON","TUE","WED","THU","FRI","SAT"};
const char m[12][20]= {"JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"};
const char na[6][10]= {"UT","GMT","EDT","CDT","MDT","PDT"};
const char t[6][10]= {"+0300","+0300","-0100","-0200","-0300","-0700"};
const int tt[6]= {3,3,7,8,9,10};
int daysofmonth(int m,int y)
{
int days=0;
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days=31;
break;
case 4:
case 6:
case 9:
case 11:
days=30;
break;
case 2:
if((y%4==0&&y%100!=0)||y%400==0)
days=29;
else
days=28;
}
return days;
}
int main()
{
string week,tn,month;
int day,year,hour,minute,second,i=0,flag=0,dh,dm;
char c1,c2,time[5];
getline(cin,week,',');
cin>>day>>month>>year>>hour>>c1>>minute>>c2>>second>>tn;
cin>>time;
int ti,n,a[4];
ti=atoi(time);//将时区时间转换为整型
n=ti;
//cout<0)
{
a[i]=n%10;
n/=10;
++i;
}
dh=a[3]*10+a[2];//计算出对应格林尼治时间时间的差值
dm=a[1]*10+a[0];
int mi;
for(i=0; i<12; ++i)
if(month==m[i])
mi=i;
int wi;//计算第几周
for(i=0; i<7; ++i)
if(week==w[i])
wi=i;
int tti;
for(i=0; i<6; ++i)//判断是否为给定时区内的
if(tn==na[i])
{
hour+=tt[i];
flag=1;
tti=i;
}
if(flag==0)
{
if(ti<0)
{
hour-=dh;
minute+=dm;
}
else
{
hour+=dh;
minute-=dm;
}
}
//cout<=60)
{
minute-=60;
++hour;
//cout<=24)
{
hour-=24;
wi=(wi+1)%7;
++day;
if(day>daysofmonth(mi,year))
{
day=1;
++mi;
if(mi>12)
{
mi=1;
++year;
}
}
//cout<
#include
#include
#include
#include
using namespace std;
char WDAY[7][4] = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" };
char MON[12][4] = { "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC" };
char MON_DAY[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
char ZONE[6][4] = { "UT", "GMT", "EDT", "CDT", "MDT", "PDT" };
int ZONE_TIME[6] = { 0, 0, -400, -500, -600, -700 };
struct mydate
{
int sec, min, hour;
int mday, mon, year, wday;
int zone;
void changezone(int zone2)
{
int zonehh = zone/100, zonemm = zone%100;
int zone2hh = zone2/100, zone2mm = zone2%100;
zone = zone2;
if( zone2mm=60 ) min%=60, ++hour;
if( hour>=24 ) ++mday, ++wday, hour-=24;
else if( hour<0 ) hour+=24, --mday, --wday;
if( wday>=7 ) wday-=7;
else if( wday<0 ) wday+=7;
if( mday<=0 )
{
--mon;
if( mon<0 ) mon+=12, --year;
bool leap = false;
if( (year%4==0 && year%100!=0) || (year%400==0 ) ) leap = true;
int thismon = MON_DAY[mon]+(int)(mon==1&&leap);
mday += thismon;
}
else
{
bool leap = false;
if( (year%4==0 && year%100!=0) || (year%400==0 ) ) leap = true;
int thismon = MON_DAY[mon]+(int)(mon==1&&leap);
if( mday>thismon ) mday-=thismon, ++mon;
if( mon>=12 ) mon-=12, ++year;
}
}
void print()
{
printf("%s, %02d %s %04d %02d:%02d:%02d %+05d\r\n", WDAY[wday], mday, MON[mon], year, hour, min, sec, zone);
}
} xd;
int main()
{
char s[10];
while( ~scanf("%s", s) )
{
s[3] = '\0';
for(int i=0; i<7; ++i)
if( !strcmp(s, WDAY[i]) )
{
xd.wday = i;
break;
}
scanf("%d", &xd.mday);
scanf("%s", s);
for(int i=0; i<12; ++i)
if( !strcmp(s, MON[i]) )
{
xd.mon = i;
break;
}
scanf("%s", s);
xd.year = atoi(s);
if( strlen(s)<=2 ) xd.year+=1900;
scanf("%2d:%2d:%2d", &xd.hour, &xd.min, &xd.sec);
scanf("%s", s);
if( s[0]=='+' || s[0]=='-' )
sscanf(s, "%d", &xd.zone);
else
{
for(int i=0; i<6; ++i)
if( !strcmp(s, ZONE[i]) )
{
xd.zone = ZONE_TIME[i];
break;
}
}
xd.changezone(300);
xd.print();
}
return 0;
}