挑戰(zhàn)程序設(shè)計_程序設(shè)計導引及在線實踐之時區(qū)間時間的轉(zhuǎn)換
本文關(guān)鍵詞:程序設(shè)計導引及在線實踐,由筆耕文化傳播整理發(fā)布。
程序設(shè)計導引及在線實踐之時區(qū)間時間的轉(zhuǎn)換
5.5 例題:時區(qū)間時間的轉(zhuǎn)換
問題描述
直到 19世紀,時間校準是一個純粹的地方現(xiàn)象。每一個村莊當太陽升到昀高點的時候把他們的時鐘調(diào)到中午 12點。一個鐘表制造商人家或者村里主表的時間被認為是官方時間,市民們把自家的鐘表和這個時間對齊。每周一些熱心的市民會帶著時間標準的表,游走大街小巷為其他市民對表。在城市之間旅游的話,在到達新地方的時候需要把懷表校準。但是,當鐵路投入使用之后,越來越多的人頻繁地長距離地往來,時間變得越來越重要。在鐵路的早期,時刻表非常讓人迷惑,每一個所謂的停靠時間都是基于?康攸c的當?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ū)的轉(zhuǎn)化表如下:
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ū)之間進行轉(zhuǎn)化。輸入數(shù)據(jù)輸入的第一行包含了一個整數(shù) N,表示有 N組測試數(shù)據(jù)。接下來 N行,每一行包
括一個時間和兩個時區(qū)的縮寫,它們之間用空格隔開。時間由標準的 a.m./p.m給出。
midnight表示晚上 12點(12:00 a.m.),noon表示中午 12點(12:00 p.m.)。
輸出要求
假設(shè)輸入行給出的時間是在第一個時區(qū)中的標準時間,要求輸出這個時間在第二個時區(qū)中的標準時間。
輸入樣例
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.
解題思路
這個題目要求在兩個時區(qū)之間進行時間的轉(zhuǎn)換。我們根據(jù)每個時區(qū)與格林威治時間的轉(zhuǎn)換公式可以推算出兩個時區(qū)之間的差別。問題的解決方法不難想到,只是日期處理類問題具有共同的特點就是輸入輸出比較麻煩,有一些需要特殊處理的情況,例如轉(zhuǎn)換后多出一天或少了一天的情況需要處理。具體到這個題目來說:輸入時,除了一般的時間表示法:時:分
a.m/p.m.之外,要特殊處理 noon和 midnight;在直接通過格林威治時間進行轉(zhuǎn)換后,要判斷是否超過一天或減少了一天的情況;在輸出時間時,要對 noon和 midnight進行特殊處理。
解決這個問題時,關(guān)鍵的是確定兩個時區(qū)之間的時差。因為時區(qū)是用字符串形式給出的,所以要先將時區(qū)對應到該時區(qū)與格林威治時間的時差上。有了每個時區(qū)與格林威治時間的時差,就可以計算任意兩個時區(qū)之間的時差。
參考程序
#include
本文關(guān)鍵詞:程序設(shè)計導引及在線實踐,由筆耕文化傳播整理發(fā)布。
本文編號:194671
本文鏈接:http://www.sikaile.net/wenshubaike/xxkj/194671.html