//4_7_5: Time Zones 世界时区的转换 POJ2351 ZOJ1916
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char zone[32][5]={"UTC","GMT","BST","IST","WET","WEST","CET","CEST",
"EET","EEST","MSK","MSD","AST","ADT","NST","NDT",
"EST","EDT","CST","CDT","MST","MDT","PST","PDT",
"HST","AKST","AKDT","AEST","AEDT","ACST","ACDT","AWST"};
int hour_info[32] = {0,0,1,1,0,1,1,2,2,3,3,4,-4,-3,-3,-2,
-5,-4,-6,-5,-7,-6,-8,-7,-10,-9,-8,10,11,9,10,8};
int minute_info[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,-30,-30,0,0,0,0,0,0,0,0,0,0,0,0,0,30,30,0};
int main()
{
int i,N,zonea,zoneb,hour,minute;
char time[10],apm[5],zoneA[5],zoneB[5];
scanf("%d",&N);
while(N--)
{
hour = 0;
minute = 0;
scanf("%s",time);
if(time[0] <= '9')
{
scanf("%s%s%s",apm,zoneA,zoneB);
i = 0;
while(time[i] != ':')
{
hour = hour * 10 + (time[i] - '0');
i++;
}
i ++;
while(time[i])
{
minute = minute * 10 + (time[i] - '0');
i++;
}
if(strcmp(apm,"a.m.") == 0 && hour == 12) hour = 0;
else if(strcmp(apm,"p.m.") == 0 && hour != 12) hour = hour + 12;
}
else
{
scanf("%s%s",zoneA,zoneB);
minute = 0;
if(time[0] == 'n') hour = 12;
else hour = 0;
}
/***********到这里,时区被转化成了24小时进制************/
for(i = 0;i < 32;i ++)
if(strcmp(zone[i],zoneA) == 0)
{
zonea = i;
break;
}
for(i = 0;i < 32;i ++)
if(strcmp(zone[i],zoneB) == 0)
{
zoneb = i;
break;
}
hour = hour + (hour_info[zoneb] - hour_info[zonea]);
minute = minute + (minute_info[zoneb] - minute_info[zonea]);
if(minute < 0)
{
hour -= 1;
minute += 60;
}
else if(minute >= 60)
{
hour += 1;
minute -= 60;
}
if(hour < 0)
hour += 24;
else if(hour >=24)
hour -= 24;
/*************到这里小时和分钟都转化为了新的时区,而且是24小时制*************/
if(hour == 12 && minute == 0) printf("noon\n");
else if(hour == 0 && minute == 0) printf("midnight\n");
else
{
if(hour == 0) printf("12:");
else printf("%d:",hour > 12 ? hour - 12 : hour);
if(minute < 10) printf("0%d ",minute);
else printf("%d ",minute);
if(hour < 12) printf("a.m.\n");
else printf("p.m.\n");
}
}
return 0;
}
/*测试结果:通过POJ2351 ZOJ1916检测
4
noon HST CEST
midnight
11:29 a.m. EST GMT
4:29 p.m.
6:01 p.m. CST UTC
12:01 a.m.
12:40 p.m. ADT MSK
6:40 p.m.
请按任意键继续. . .
*/
POJ2351 ZOJ1916 Time Zones
最新推荐文章于 2020-09-15 18:52:12 发布