new date.gettime 与传入时间相差毫秒数不对_给女票解释为什么日本时间比中国时间快一个小时?...
馬上就要五一勞動(dòng)節(jié)放假了,忙碌了半年,準(zhǔn)備趁著假期出去放松放松,于是開(kāi)始準(zhǔn)備行程。女朋友聽(tīng)說(shuō)日本5月份可以看櫻花,于是她在看去日本的航班。我在旁邊默默的看了下我的信用卡額度。
如上圖,飛機(jī)13:40從杭州蕭山機(jī)場(chǎng)起飛,17:50在東京成田機(jī)場(chǎng)降落。但是實(shí)際上,飛機(jī)整個(gè)航行確實(shí)只飛行了3小時(shí)10分。因?yàn)槿毡緯r(shí)間比中國(guó)時(shí)間早一個(gè)小時(shí)。日本的17:50相當(dāng)于國(guó)內(nèi)的16:50。飛機(jī)實(shí)際上只飛了3小時(shí)而已。
時(shí)區(qū)很久以前,在沒(méi)有鐘表的年代,人們通過(guò)觀察太陽(yáng)決定時(shí)間,一開(kāi)始人們根據(jù)太陽(yáng)掛在天空的位置來(lái)大致的確定時(shí)間,慢慢的人們根據(jù)太陽(yáng)照射到的物體投下的影子來(lái)確定時(shí)間。
如古代人們使用的日晷,就是人類古代利用日影測(cè)得時(shí)刻的一種計(jì)時(shí)儀器。
在一天中,被太陽(yáng)照射到的物體投下的影子在不斷地改變著:第一是影子的長(zhǎng)短在改變。早晨的影子最長(zhǎng),隨著時(shí)間的推移,影子逐漸變短,一過(guò)中午它又重新變長(zhǎng);
第二是影子的方向在改變。在北回歸線以北的地方,早晨的影子在西方,中午的影子在北方,傍晚的影子在東方。從原理上來(lái)說(shuō),根據(jù)影子的長(zhǎng)度或方向都可以計(jì)時(shí),但根據(jù)影子的方向來(lái)計(jì)時(shí)更方便一些。故通常都是以影子的方位計(jì)時(shí)。
隨著時(shí)間的推移,晷針上的影子慢慢地由西向東移動(dòng)。移動(dòng)著的晷針影子好像是現(xiàn)代鐘表的指針,晷面則是鐘表的表面,以此來(lái)顯示時(shí)刻。
但是,由于地球的自轉(zhuǎn),這就使得不同經(jīng)度的地方的時(shí)間有所不同(地方時(shí))。東邊的地點(diǎn)比西邊的地點(diǎn)先看到日出,東邊地點(diǎn)的時(shí)刻較早,西邊地點(diǎn)的時(shí)刻較晚。
世界各個(gè)國(guó)家位于地球不同位置上,因此不同國(guó)家,特別是東西跨度大的國(guó)家日出、日落時(shí)間必定有所偏差。這些偏差就是所謂的時(shí)差。
為了照顧到各地區(qū)的使用方便,又使其他地方的人容易將本地的時(shí)間換算到別的地方時(shí)間上去,1863年,人們首次提出了時(shí)區(qū)的概念。
有關(guān)國(guó)際會(huì)議決定將地球表面按經(jīng)線從東到西,劃成一個(gè)個(gè)區(qū)域,并且規(guī)定相鄰區(qū)域的時(shí)間相差1小時(shí)。
在同一區(qū)域內(nèi)的東端和西端的人看到太陽(yáng)升起的時(shí)間最多相差不過(guò)1小時(shí)。當(dāng)人們跨過(guò)一個(gè)區(qū)域,就將自己的時(shí)鐘校正1小時(shí)(向西減1小時(shí),向東加1小時(shí)),跨過(guò)幾個(gè)區(qū)域就加或減幾小時(shí)。就像我們?nèi)绻ト毡韭糜?#xff0c;我們的手表時(shí)間顯示的是中國(guó)時(shí)間,為了適應(yīng)當(dāng)?shù)氐臅r(shí)間,就需要將其校正一個(gè)小時(shí)。
現(xiàn)今全球共分為24個(gè)時(shí)區(qū)。
格林威治時(shí)間我們說(shuō)中國(guó)在時(shí)區(qū)上是東八區(qū),一般用GMT+8來(lái)表示,日本是東九區(qū),一般用GMT+9來(lái)表示。
其實(shí)就是說(shuō)中國(guó)時(shí)間是在GMT時(shí)間的基礎(chǔ)上加8個(gè)小時(shí),而日本時(shí)間是在GMT時(shí)間的基礎(chǔ)上加9個(gè)小時(shí)。所以日本時(shí)間會(huì)比中國(guó)時(shí)間快一個(gè)小時(shí)。
那么到底什么是GMT呢?
GMT是Greenwich Mean Time的縮寫,即格林威治時(shí)間(格林尼治平時(shí)),是指位于英國(guó)倫敦郊區(qū)的皇家格林尼治天文臺(tái)當(dāng)?shù)氐钠教?yáng)時(shí),因?yàn)楸境踝游缇€被定義為通過(guò)那里的經(jīng)線。
自1924年2月5日開(kāi)始,格林尼治天文臺(tái)負(fù)責(zé)每隔一小時(shí)向全世界發(fā)放調(diào)時(shí)信息。國(guó)際天文學(xué)聯(lián)合會(huì)于1928年決定,將由格林威治平子夜起算的平太陽(yáng)時(shí)作為世界時(shí),也就是通常所說(shuō)的格林威治時(shí)間。
由于地理位置不同,中國(guó)和日本分屬于不同的時(shí)區(qū),采用的時(shí)間標(biāo)準(zhǔn)也就不同。而規(guī)定中相鄰的時(shí)區(qū)中時(shí)間間隔是1小時(shí),又由于中國(guó)屬于東八區(qū),日本屬于東九區(qū),所以中國(guó)時(shí)間是GTM+8,日本時(shí)間是GMT+9,所以,日本時(shí)間比中國(guó)時(shí)間快一個(gè)小時(shí)。理論時(shí)區(qū)與法定時(shí)區(qū)
理論時(shí)區(qū)以被15整除的子午線為中心,向東西兩側(cè)延伸7.5度,即每15°劃分一個(gè)時(shí)區(qū),這是理論時(shí)區(qū)。
理論時(shí)區(qū)的時(shí)間采用其中央經(jīng)線(或標(biāo)準(zhǔn)經(jīng)線)的地方時(shí)。所以每差一個(gè)時(shí)區(qū),區(qū)時(shí)相差一個(gè)小時(shí),相差多少個(gè)時(shí)區(qū),就相差多少個(gè)小時(shí)。東邊的時(shí)區(qū)時(shí)間比西邊的時(shí)區(qū)時(shí)間早。但是,各個(gè)國(guó)家和地區(qū)具體采用哪個(gè)時(shí)區(qū)其實(shí)是自己可以決定的,理論時(shí)區(qū)只是建議性的。為了避開(kāi)國(guó)界線,有的時(shí)區(qū)的形狀并不規(guī)則,而且比較大的國(guó)家以國(guó)家內(nèi)部行政分界線為時(shí)區(qū)界線,這是實(shí)際時(shí)區(qū),即法定時(shí)區(qū)。
例如,中國(guó)幅員寬廣,在理論時(shí)區(qū)上,差不多跨5個(gè)時(shí)區(qū),包括東五區(qū)、東六區(qū)、東七區(qū)、東八區(qū)以及東九區(qū)。如果嚴(yán)格按照地理劃分的話,那么烏魯木齊的時(shí)間可能和黑龍江的時(shí)間相差四個(gè)小時(shí)。
但是,為了方便管理和使用,中國(guó)的法定時(shí)區(qū)以東八時(shí)區(qū)的標(biāo)準(zhǔn)時(shí)即北京時(shí)間為準(zhǔn)。所以,中國(guó)時(shí)間俗稱北京時(shí)間。好處自然不言而喻,大家統(tǒng)一使用同一個(gè)時(shí)間,就是比較方便。缺點(diǎn)也比較明顯,就是同樣是早上四點(diǎn),有的地區(qū)天已經(jīng)亮了,但是有些地方還是黑的。
雖然本文介紹的中國(guó)和日本這兩個(gè)國(guó)家都是使用唯一法定時(shí)區(qū)的。但是,還是有很多國(guó)家并不是使用統(tǒng)一的時(shí)區(qū)的。
如美國(guó)各州的時(shí)區(qū),基本上按地理位置,也就是經(jīng)度區(qū)分的,也許美國(guó)是執(zhí)行的最標(biāo)準(zhǔn)者之一。
戰(zhàn)斗民族俄羅斯的時(shí)區(qū)也并不統(tǒng)一,比如處在幾乎差不多為止的葉卡捷琳堡和鄂木斯克就執(zhí)行了兩個(gè)時(shí)區(qū)。這種情況大多數(shù)和歷史有關(guān)。代碼中獲取不同時(shí)區(qū)的時(shí)間Java中使用TimeZone 表示時(shí)區(qū)偏移量。TimeZone對(duì)象給我們的是原始的偏移量,也就是與GMT相差的微秒數(shù),即TimeZone表示時(shí)區(qū)偏移量,本質(zhì)上以毫秒數(shù)保存與GMT的差值。
獲取TimeZone可以通過(guò)時(shí)區(qū)ID,如"America/New_York",也可以通過(guò)GMT+/-hh:mm來(lái)設(shè)定。例如北京時(shí)間可以表示為GMT+8:00。
當(dāng)我們想要輸出美國(guó)洛杉磯時(shí)間時(shí),可以選擇這種方式:
TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));Date?date?=?new?Date();
System.out.println(date);
需要注意的是,以下代碼是無(wú)法獲得美國(guó)洛杉磯時(shí)間的:
System.out.println(Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles")).getTime());因?yàn)楫?dāng)我們使用System.out.println來(lái)輸出一個(gè)時(shí)間的時(shí)候,他會(huì)調(diào)用Date類的toString方法,而該方法會(huì)讀取操作系統(tǒng)的默認(rèn)時(shí)區(qū)來(lái)進(jìn)行時(shí)間的轉(zhuǎn)換。只有修改了默認(rèn)時(shí)區(qū)才會(huì)顯示該時(shí)區(qū)的時(shí)間。
但是,通過(guò)閱讀Calendar的源碼,我們可以發(fā)現(xiàn),getInstance方法雖然有一個(gè)參數(shù)可以傳入時(shí)區(qū),但是并沒(méi)有將默認(rèn)時(shí)區(qū)設(shè)置成傳入的時(shí)區(qū)。
而在Calendar.getInstance.getTime后得到的時(shí)間只是一個(gè)時(shí)間戳,其中未保留任何和時(shí)區(qū)有關(guān)的信息,所以,在輸出時(shí),還是顯示的是當(dāng)前系統(tǒng)默認(rèn)時(shí)區(qū)的時(shí)間。
Java8提供了一套新的時(shí)間處理API,這套API比以前的時(shí)間處理API要友好的多。
Java8 中加入了對(duì)時(shí)區(qū)的支持,帶時(shí)區(qū)的時(shí)間為分別為:ZonedDate、ZonedTime、ZonedDateTime。其中每個(gè)時(shí)區(qū)都對(duì)應(yīng)著 ID,地區(qū)ID都為 “{區(qū)域}/{城市}”的格式,如Asia/Shanghai、America/Los_Angeles等。
在Java8中,直接使用以下代碼即可輸出美國(guó)洛杉磯的時(shí)間:
LocalDateTime?now?=?LocalDateTime.now(ZoneId.of("America/Los_Angeles"));System.out.println(now);
好文章那么多,千萬(wàn)別走散了
進(jìn)入藍(lán)橋微官網(wǎng),技術(shù)干貨
總結(jié)
以上是生活随笔為你收集整理的new date.gettime 与传入时间相差毫秒数不对_给女票解释为什么日本时间比中国时间快一个小时?...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: haproxy服务启动命令_HaProx
- 下一篇: cancase lin管脚_汽车里有什么