0018-時區(qū)間時間的轉換

問題描述

19 世紀,時間校準是一個純粹的地方現(xiàn)象。每一個村莊當太陽升到最高點的時候把他們的時鐘調到中午 12 點氮凝。一個鐘表制造商人家或者村里主表的時間被認為是官方時間,市民們把自家的鐘表和這個時間對齊砖茸。每周一些熱心的市民會帶著時間標準的表,游走大街小巷為其他市民對表受扳。在城市之間旅游的話,在到達新地方的時候需要把懷表校準税灌。但是,當鐵路投入使用之后,越來越多的人頻繁地長距離地往來,時間變得越來越重要。在鐵路的早期,時刻表非常讓人迷惑,每一個所謂的蜕埽靠時間都是基于停靠地點的當?shù)貢r間绸栅。時間的標準化對于鐵路的高效運營變得非常重要级野。
在 1878 年,加拿大人 Sir Sanford Fleming 提議使用一個全球的時區(qū)(這個建議被采納,并衍生了今天我們所使用的全球時區(qū)的概念) ,他建議把世界分成 24 個時區(qū),每一個跨越 15 度經(jīng)線(因為地球的經(jīng)度 360 度, 劃分成 24 塊后, 一塊為 15 度) Sir Sanford Fleming 的方法解決了一個全球性的時間混亂的問題。
美國鐵路公司于 1883 年 11 月 18 日使用了 Fleming 提議的時間方式粹胯。1884 年一個國際子午線會議在華盛頓召開,他的目的是選擇一個合適的本初子午線蓖柔。大會最終選定了格林威治為標準的 0 度。盡管時區(qū)被確定了下來,但是各個國家并沒有立刻更改他們的時間規(guī)范,在美國,盡管到 1895 年已經(jīng)有很多州開始使用標準時區(qū)時間,國會直到1918 年才強制使用會議制定的時間規(guī)范矛双。
今天各個國家使用的是一個 Fleming 時區(qū)規(guī)范的一個變種,中國一共跨越了 5 個時區(qū),但是使用了一個統(tǒng)一的時間規(guī)范,比 Coordinated Universal Time(UTC,格林威制時間)早 8 個小時渊抽。俄羅斯也擁護這個時區(qū)規(guī)范,盡管整個國家使用的時間和標準時區(qū)提前了 1 個小時。澳大利亞使用 3 個時區(qū),其中主時區(qū)提前于他按 Fleming 規(guī)范的時區(qū)半小時议忽。很多中東國家也使用了半時時區(qū)(即不是按照 Fleming 的 24 個整數(shù)時區(qū)) 懒闷。
因為時區(qū)是對經(jīng)度進行劃分,在南極或者北極工作的科學家直接使用了 UTC 時間,否則南極大陸將被分解成 24 個時區(qū)。
時區(qū)的轉化表如下:

UTC Coordinated Universal Time
GMT Greenwich Mean Time, 定義為 UTC
BST British Summer Time, 定義為 UTC+1 hour
IST Irish Summer Time, 定義為 UTC+1 hour
WET Western Europe Time, 定義為 UTC
WEST Western Europe Summer Time, 定義為 UTC+1 hour
CET Central Europe Time, 定義為 UTC+1
CEST Central Europe Summer Time, 定義為 UTC+2
EET Eastern Europe Time, 定義為 UTC+2
EEST Eastern Europe Summer Time, 定義為 UTC+3
MSK Moscow Time, 定義為 UTC+3
MSD Moscow Summer Time, 定義為 UTC+4
AST Atlantic Standard Time, 定義為 UTC-4 hours
ADT Atlantic Daylight Time, 定義為 UTC-3 hours
NST Newfoundland Standard Time, 定義為 UTC-3.5 hours
NDT Newfoundland Daylight Time, 定義為 UTC-2.5 hours
EST Eastern Standard Time, 定義為 UTC-5 hours
EDT Eastern Daylight Saving Time, 定義為 UTC-4 hours
CST Central Standard Time, 定義為 UTC-6 hours
CDT Central Daylight Saving Time, 定義為 UTC-5 hours
MST Mountain Standard Time, 定義為 UTC-7 hours
MDT Mountain Daylight Saving Time, 定義為 UTC-6 hours
PST Pacific Standard Time, 定義為 UTC-8 hours
PDT Pacific Daylight Saving Time, 定義為 UTC-7 hours
HST Hawaiian Standard Time, 定義為 UTC-10 hours
AKST Alaska Standard Time, 定義為 UTC-9 hours
AKDT Alaska Standard Daylight Saving Time, 定義為 UTC-8 hours
AEST Australian Eastern Standard Time, 定義為 UTC+10 hours
AEDT Australian Eastern Daylight Time, 定義為 UTC+11 hours
ACST Australian Central Standard Time, 定義為 UTC+9.5 hours
ACDT Australian Central Daylight Time, 定義為 UTC+10.5 hours
AWST Australian Western Standard Time, 定義為 UTC+8 hours

下面給出了一些時間,請在不同時區(qū)之間進行轉化栈幸。

輸入

輸入的第一行包含了一個整數(shù) N,表示有 N 組測試數(shù)據(jù)愤估。接下來 N 行,每一行包括一個時間和兩個時區(qū)的縮寫,它們之間用空格隔開。時間由標準的 a.m./p.m 給出速址。midnight 表示晚上 12 點(12:00 a.m.) ,noon 表示中午 12 點(12:00 p.m.)

輸出

假設輸入行給出的時間是在第一個時區(qū)中的標準時間,要求輸出這個時間在第二個時區(qū)中的標準時間玩焰。

輸入樣列

4
noon HST CEST
11:29 a.m. EST GMT
6:01 p.m. CST UTC
12:40 p.m. ADT MSK

輸出樣例

midnight
4:29 p.m.
12:01 a.m.
6:40 p.m. 

算法實現(xiàn)

using System;

namespace Questions{
    class Program{
        public static void Main(string[] args){
            double[] time = {
            0,0,1,1,0,1,1,2,2,3,
            3,4,-4,-3,-3.5,-2.5,-5,-4,-6,-5,
            -7,-6,-8,-7,-10,-9,-8,10,11,9.5,10.5,8};
            
            int n = int.Parse(Console.ReadLine());
            while(n > 0){
                n--;
                string input = Console.ReadLine();
                string[] data = input.Split();
                double utc = 0;
                string result = "";
                int start = 0;
                int end = 0;
                int hour=0, minute=0;
                if (data[0].Equals("noon") || data[0].Equals("midnight")){
                    start = FindUTC(data[1]);
                    end = FindUTC(data[2]);
                    minute = 0;
                    if (data[0].Equals("noon"))
                        hour = 24;
                    else
                        hour = 12;
                }
                else {
                    start = FindUTC(data[2]);
                    end = FindUTC(data[3]);
                    int i = 0;
                    while (true) {
                        if (data[0][i] == ':')
                            break;
                        else
                            hour = hour * 10 + data[0][i] - '0';
                        i++;
                    }
                    int index = data[0].Length;
                    minute = (data[0][index - 2] - '0') * 10 + data[0][index - 1] - '0';
                    if (data[1][0] == 'p')
                        hour += 12;
                }
                utc =- time[start]  + time[end];
                if (utc > 0){
                    if (utc % 1 == 0.5){
                        if (minute >= 30)
                            minute -= 30;
                        else{
                            minute += 30;
                            hour--;

                        }
                    }
                    hour -= (int)utc;
                }
                else {
                    utc = Math.Abs(utc);
                    if (utc % 1 == 0.5){
                        if (minute < 30)
                            minute += 30;
                        else{
                            minute -= 30;
                            hour++;

                        }
                    }
                    hour += (int)utc;
                }
                if (hour < 0)
                    hour += 24;
                else if(hour>=24 && minute!=0)
                    hour -= 24;
                if (hour==12 && minute==0)
                    Console.WriteLine("midnight");
                else if(hour == 24 && minute == 0)
                     Console.WriteLine("noon");
                else if (hour >= 13) {
                    Console.WriteLine("{0}:{1} p.m.", hour-12, minute);
                }else
                    Console.WriteLine("{0}:{1} a.m.", hour, minute);
            }
            Console.ReadKey();
        }
        /// <summary>
        /// 匹配時區(qū)
        /// </summary>
        /// <param name="temp">時區(qū)縮寫</param>
        /// <returns>匹配到zone數(shù)組的下標</returns>
        public static int FindUTC(string temp) {
            string[] zone = {
                "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"};
            for (int i = 0; i < zone.Length; i++) {
                if (temp.Equals(zone[i]))
                    return i;
                    }
            return 0;
        }
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市芍锚,隨后出現(xiàn)的幾起案子昔园,更是在濱河造成了極大的恐慌蔓榄,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件默刚,死亡現(xiàn)場離奇詭異甥郑,居然都是意外死亡,警方通過查閱死者的電腦和手機荤西,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門澜搅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人邪锌,你說我怎么就攤上這事勉躺。” “怎么了觅丰?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵饵溅,是天一觀的道長。 經(jīng)常有香客問我舶胀,道長概说,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任嚣伐,我火速辦了婚禮糖赔,結果婚禮上,老公的妹妹穿的比我還像新娘轩端。我一直安慰自己放典,他們只是感情好,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布基茵。 她就那樣靜靜地躺著奋构,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拱层。 梳的紋絲不亂的頭發(fā)上弥臼,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音根灯,去河邊找鬼径缅。 笑死,一個胖子當著我的面吹牛烙肺,可吹牛的內容都是我干的纳猪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼桃笙,長吁一口氣:“原來是場噩夢啊……” “哼氏堤!你這毒婦竟也來了?” 一聲冷哼從身側響起搏明,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鼠锈,失蹤者是張志新(化名)和其女友劉穎闪檬,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體购笆,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡谬以,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了由桌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡邮丰,死狀恐怖行您,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情剪廉,我是刑警寧澤娃循,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站斗蒋,受9級特大地震影響捌斧,放射性物質發(fā)生泄漏。R本人自食惡果不足惜泉沾,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一捞蚂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧跷究,春花似錦姓迅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至柴我,卻和暖如春解寝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背艘儒。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工聋伦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人彤悔。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓嘉抓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親晕窑。 傳聞我的和親對象是個殘疾皇子抑片,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內容

  • 概念解釋 時區(qū)(Timezone) 為什么會將地球分為不同時區(qū)呢?因為地球總是自西向東自轉杨赤,東邊總比西邊先看到太陽...
    黑炭媽閱讀 6,767評論 0 5
  • 時區(qū)這個術語敞斋,可以被用來描述好幾個不同的東西截汪。 時區(qū)可以是一個地區(qū),在這個區(qū)域內植捎,大家使用同樣的標準時間衙解。 與 U...
    kdepp閱讀 1,164評論 0 0
  • 時間(date time)應該是一個精確的點,以便能夠進行比較焰枢。但是如何能讓他成為一個精確的點呢蚓峦?一般的,如果需要...
    遠程板磚閱讀 1,856評論 1 8
  • 標準時間济锄,在有些國家也被稱為冬季時間暑椰,或正常時間 一個地區(qū)的標準時間,即在夏令時 (DST, Daylight S...
    kdepp閱讀 962評論 0 0
  • 聞香碼字荐绝,在想今天聞啥呢一汽? 腦袋里一閃閃到歐白芷根。猛吸一口低滩,一種藥草的苦味直面而襲召夹。然后,第5節(jié)腰椎那一陣氣泡散...
    溫馨Unicorn閱讀 725評論 0 3