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