格林尼治所在地的標準時間
協調世界時,又稱世界統一時間、世界標準時間、國際協調時間。由於英文(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 = newdefault: 2020-03-25t02:53:51.259zdate();
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() )
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...