關於時間格式 GMT,UTC,CST,ISO

2022-03-12 04:00:54 字數 3663 閱讀 9406

格林尼治所在地的標準時間

協調世界時,又稱世界統一時間、世界標準時間、國際協調時間。由於英文(cut)和法文(tuc)的縮寫不同,作為妥協,簡稱utc。

協調世界時是以原子時秒長為基礎,在時刻上盡量接近於世界時的一種時間計量系統。中國大陸採用iso 8601-1988的《資料元和交換格式資訊交換日期和時間表示法》(gb/t 7408-1994)稱之為國際協調時間,代替原來的gb/t 7408-1994;中國台灣採用cns 7648的《資料元及交換格式–資訊交換–日期及時間的表示法》,稱之為世界統一時間。

cst可視為美國、澳大利亞、古巴或中國的標準時間。

是一種時間的表示方法

說明:gmt是前世界標準時,utc是現世界標準時。

gmt和utc時間可以認為是一樣的, 只不過utc更加精準. 

nodejs

1 let d = new

date();

2 console.log( 'default: ',d )

3 console.log( 'toisostring: ',d.toisostring() )

4 console.log( 'toutcstring: ',d.toutcstring() )

5 console.log( 'tolocalestring: ',d.tolocalestring() )

6 console.log( 'tolocaledatestring: ',d.tolocaledatestring() )

7 console.log( 'tostring: ',d.tostring() )

8 console.log( 'totimestring: ',d.totimestring() )

9 console.log( 'todatestring: ',d.todatestring() )

10 console.log( 'tojson: ',d.tojson() )

11 console.log( 'togmtstring: ',d.togmtstring() )

default:  2020-03-25t02:53:51.259z

toisostring: 2020-03-25t02:39:52.230z

toutcstring: wed, 25 mar 2020 02:39:52 gmt

tolocalestring: 2020-3-25 10:39:52

tolocaledatestring: 2020-3-25

tostring: wed mar 25 2020 10:39:52 gmt+0800 (gmt+08:00)

totimestring: 10:39:52 gmt+0800 (gmt+08:00)

todatestring: wed mar 25 2020

tojson: 2020-03-25t02:39:52.230z

togmtstring: wed, 25 mar 2020 02:39:52 gmt

mongo 預設儲存時間是以utc表示的,  當我們儲存時間的時候,

當有時間欄位時:  createtime:.    相當於 new date().toisostring().     採用iso表示法儲存在資料庫中的.

我們studio 3t查資料庫的時候,  發現時間少了8個小時,   其實是沒有少,   把它轉換成本地時間就沒有問題了.  看到的時間就是符合咱們中國人的時間了

utc+08 就是咱們中國的時間

現在看到的時間就是正確的了.    

通過nodejs查詢結果時候, 拿到的時間其實是時間物件d,  可以通過 d.tolocalestring   d.tolocaledatestring  d.totimestring 方法顯示正確

通過時間查詢的時候.   可以放心的使用時間物件查詢.    不要管時區問題. 

如我們要查今天的時間登入的使用者,    new date(new date().sethours(0,0,0))  表示凌晨的時間, 直接查詢就ok. 

有乙個問題,  當我們指定乙個時間字串去建立時間物件的時候,   這個字串預設就是utc時間的字串.    

我們一般其實想表達的時間字串應該是北京時間.   比如要查user表3月21號的資料:

db.users.find(})

或者:db.users.find(})

還有一種可能是根據某天的時間戳查詢:

new date(1584720000000)   直接根據時間物件查詢即可,  這裡不用管時區問題.       

注意:mongo是以utc儲存的, mongo查詢管理工具, 可以設定本地時間查詢,  看到時間的就是正常的.

查詢的時候, 如果以時間戳查詢, 則不用管時區的問題.

查詢的時候, 如果以時間字串查詢, 最好指定時區,  

時間字串尾部加z 表示utc。   +0800表示加上8時區, 也即本地時間.

網上很多查詢方式, 都是自己計算把本地時間加減8小時, 再去儲存和查詢, 沒必要啊.       

時間物件.tolocalstring() 就是本地時間,      時間物件.toisostring()  就是utc時間

new date("2020-03-21 01:00:00 utc+0800") 以這樣的時間字串建立物件,  然後用這個物件去運算元據庫就不會有問題了. 

如果加入了具體時間點, 去掉utc+0800也可以, 預設本地時間字串.   如果沒有指定時分秒,則預設是utc時間字串.

在實際中碰到的問題

因為對資料庫和時區不熟悉,  讓策劃配的時間是 "2020-02-22t16:00:00.000z"  這樣的格式.    

正確的格式應該是: "2020-02-22 16:00:00 utc+0800"  或者 "2020-02-22 16:00:00"

"2020-02-22t16:00:00.000z" 這個時間字串是utc時間     但是策劃把這個utc時間當成了北京時間.   於是配置生效就有問題了

utc+8=北京時間。     也就需要這個時間 "2020-02-22t16:00:00.000z" 減去8小時,  才是資料庫應該儲存的時間. 

let d = new date("2020-02-22t16:00:00.000z"); d.sethours(d.gethours() - 8)

總結:為了操作方便,時間字串的格式應該寫為: 2020/02/22 10:00:00  這樣的格式.  

年月日中間用橫槓連線且沒有指定時分秒則預設表示utc時間.   可以指定utc+0800表示時間字串格式

時分秒後面加z表示utc時間,  不指定z則表示本地時間.

為了防止出錯, 建議年月日中間用斜槓『/』連線

資料庫以utc儲存, 沒有任何影響.時間是不會變的,   因為是時間物件, 想以什麼格式顯示都ok.    

關於時間格式轉date的問題

因為專案後台傳回的字串為yyyy mm dd hh mm ss格式,在專案中需要轉換為自己需要的nsdate型別,所以使用方法 nsdate yc stringwithtimestring nsstring string withformat nsstring format 在此過程中遇到乙個問題 ...

關於時間的運算和格式轉換

在個人重構中,關於時間的格式轉換和運算出現的次數還是比較多的,所以今天我們將時間的一些知識學習下。首先我們先來看下關於時間格式的轉換 時間格式轉換的方式有很多,我們這裡就直接用 tostring 方法來轉換日期的顯示格式 datetime.now.tostring yyyy mm ddhh mm s...

關於時間的運算和格式轉換

在個人重構中,關於時間的格式轉換和運算出現的次數還是比較多的,所以今天我們將時間的一些知識學習下。首先我們先來看下關於時間格式的轉換 時間格式轉換的方式有很多,我們這裡就直接用 tostring 方法來轉換日期的顯示格式 datetime.now.tostring yyyy mm ddhh mm s...