新聞中心
為什么要講一下這個問題呢?

瑤海網(wǎng)站建設公司創(chuàng)新互聯(lián),瑤海網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為瑤海成百上千提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設要多少錢,請找那個售后服務好的瑤海做網(wǎng)站的公司定做!
很多時候在項目的開發(fā)中或許沒有接觸過多時區(qū),項目大多是部署國內,同時僅僅為國內用戶提供服務,一旦當用戶到國外后,項目中的很多時間都變得與當?shù)貢r間不一樣,對用戶非常不友好。例如近幾年非?;鸬木€上教育,像一些外籍老師,教小朋友學英文,如何保證雙方在特定的時間都進入教室,變得非常常見。
對于多時區(qū)用戶提供服務,業(yè)界如何處理時間呢?
在講述業(yè)界的處理之前,我們先來了解幾個概念。
時間戳,是指格林尼治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現(xiàn)在的總秒數(shù),用有符號32位整數(shù)表示。
GMT:Greenwich Mean Time 格林尼治標準時間。這是以英國格林尼治天文臺觀測結果得出的時間,這是英國格林尼治當?shù)貢r間,這個地方的當?shù)貢r間過去被當成世界標準的時間。
UT:Universal Time 世界時。根據(jù)原子鐘計算出來的時間。
UTC:Coordinated Universal Time 協(xié)調世界時。因為地球自轉越來越慢,每年都會比前一年多出零點幾秒,每隔幾年協(xié)調世界時組織都會給世界時+1秒(會出現(xiàn)閏秒即61s,一般不處理),讓基于原子鐘的世界時和基于天文學(人類感知)的格林尼治標準時間相差不至于太大。并將得到的時間稱為UTC,這是現(xiàn)在使用的世界標準時間。
GMT和UTC維度不一樣,但值是一樣的,UTC = GTM+0(時區(qū))
我們都知道時間都可以用GMT或者UTC來表示,而時間戳由于是基于格林尼治的特定時間,在地球上過1秒,在全球任何一個地方都是1秒,因此同一時刻,全球的值是一樣的。
可以看看java示例,發(fā)現(xiàn)不同時區(qū)時間戳確實是相等的
- // 獲得不同時區(qū)的時間,來計算時間戳
- LocalDateTime localDateTime = LocalDateTime.now();
- OffsetDateTime offsetDateTime7 = OffsetDateTime.of(localDateTime.minusHours(1), ZoneOffset.ofHours(7));
- OffsetDateTime offsetDateTime8 = OffsetDateTime.of(localDateTime, ZoneOffset.ofHours(8));
- System.out.println(offsetDateTime7.toEpochSecond() == offsetDateTime8.toEpochSecond()); // true
因此,業(yè)界對于時區(qū)的處理基本都是基于時間戳。
[[358244]]
前后端配合以保證用戶看到的都是本地時間
針對此類問題,對于后端需要注意的是服務器是否會部署到不同時區(qū),建議獲取系統(tǒng)時間的操作,改成獲取統(tǒng)一一個時區(qū)的時間,再將其轉成時間戳進行存儲;而前端最主要的則是在請求中傳入時區(qū)到后端,一般可以在請求頭中添加獲取到的系統(tǒng)的時區(qū),將時區(qū)傳入到后端。后端根據(jù)時區(qū),如+8,則將數(shù)據(jù)庫中的時間戳,轉成對應時區(qū)的時間。如下圖
最后,推薦使用java8時間類去處理,java8中核心的類就幾種:
ZoneId、ZoneOffset主要表示時區(qū)和偏移
Instant 表示時間戳,Duration、Period 表示時間差,前者表示時間差,后者表示日期差
LocalDate、LocalTime、LocalDateTime表示日期、時間、日期+時間
ZonedDateTime、OffsetDateTime含時區(qū)信息的時間
標題名稱:聽干貨君聊項目多時區(qū)處理
本文鏈接:http://m.5511xx.com/article/cdgghpc.html


咨詢
建站咨詢
