美國時間轉中國時間,相容夏令時

2021-07-22 17:44:44 字數 1237 閱讀 6455

/**

* 美國時間轉中國時間

* @param date

* @param oldzone

* @param newzone

* @return

*/public staticdatechangetimezone

(datedate,

timezone oldzone,

timezone newzone)

public staticdatestrtodate

(stringstr)

關鍵原理:

時間和日曆是兩個不同的概念。

date代表的是乙個絕對時間,也就是說,不管你在哪個時區,date都是一樣的,都是從2023年1月1日0點0分gmt時間起,到目前這一刻的毫秒數。所以,你第一段**和第二段**裡面,得到的date物件所代表的時間其實是一樣的。

而日曆是人們對絕對時間的一種描述方法,例如某年某月某日幾時幾分幾秒,這,隨著你當前所處的時區和地區而不同。

你在觀察date物件的時候,你肯定沒有去看它的毫秒數,而是先把毫秒數轉換成乙個日曆。你沒有寫出你是怎麼把date轉換成日曆的,但假如你是用預設的date.tostring()的話,那麼,這是根據當前的預設時區來把毫秒數轉換成日曆的。因此,你在第一段**裡沒有修改預設時區,得到的還是美國時間。而在第二段**裡,因為修改了預設時區,所以雖然絕對時間沒有變化,但是你轉換得到的日曆不一樣了。

其實,如果你是要獲取當前時間,那麼直接用new date()就可以了,跟你先建立乙個calendar物件,再指定乙個時區後獲取的date是完全一樣的。只有在你需要把乙個date用日曆來表示的時候,才需要用到calendar和timezone。

一些總結:

calendar.settimezone():你在calendar物件裡面set的日期(日曆)是對於哪個時區來說的

calendar.gettime():你說說的這個日期(日曆),從1970(標準時區的這個日期)到現在過了多少秒

******dateformat.settimezone(timezone.gettimezone("america/los_angeles"));

******dateformat.format(date):按照時區,來對時間戳進行日期(日曆)格式化

android 時間處理(夏令時)

最近,在忙乙個計步器的專案,模組出口國外,軟體自然得國際化。軟體上架後老外一用出現了乙個重大的bug 模組與手機時間不同步,各時區時間塊一小時或慢一小時,還有的快半小時與慢半小時的,也沒有做夏令時處理。在網上找了許多論壇,始終沒有這方面 夏令時處理的 只能說最笨的方法乙個個的列舉,辛苦啊,時區id差...

夏令時 遊戲時間邏輯處理

遊戲中使用gettimeofday 獲取從1970 01 01 00 00 00到現在經過的真實秒數 當進入遊戲時使用localtime來判斷 tm.tm isdst是否有從夏令時進出,進入夏令時,呼叫gettimeofday 和mktime的時間是相同的,離開夏令時,呼叫gettimeofday ...

日期與時間函式與夏令時的關係

測試環境 vmware12 pro centos 7 1.time t 為從公元1970 年1 月1 日0 時0 分0 秒算起至今的utc 時間所經過的秒數 2.結構tm的定義為 struct tm 1.time t time time t t 該函式會返回從公元1970年1月1日的utc時間從0時...