問題描述 今天遇到一個(gè)奇怪的問題,在服務(wù)器端通過 Java 獲取當(dāng)前時(shí)間為 Fri Aug 28 09:37:46 CST 2009, 轉(zhuǎn)化為GMT時(shí)間為:28 Aug 2009 01:37:46 GMT,也就是說GMT時(shí)間加上 8 個(gè)小時(shí)等于CST表示的時(shí)間, 那這個(gè)CST不就是北京時(shí)間么,因?yàn)槲覀兪窃跂|八區(qū)的。
一切看起來很正常,不過在客戶端用JavaScript解析這個(gè)時(shí)間就有問題了:
// Fri Aug 28 2009 23:37:46 GMT+0800
new Date('Fri Aug 28 09:37:46 CST 2009').toString();
好奇怪,這次GMT和CST表示的時(shí)間居然相差整整 14 個(gè)小時(shí)?
百度一下 找到這篇文章,問題已經(jīng)很明了。
GMT(Greenwich Mean Time)代表格林尼治標(biāo)準(zhǔn)時(shí)間,這個(gè)大家都知道。
而CST卻同時(shí)可以代表如下 4 個(gè)不同的時(shí)區(qū):
- Central Standard Time (USA) UT-6:00
- Central Standard Time (Australia) UT+9:30
- China Standard Time UT+8:00
- Cuba Standard Time UT-4:00
可見,CST可以同時(shí)表示美國,澳大利亞,中國,古巴四個(gè)國家的標(biāo)準(zhǔn)時(shí)間。
前面提到的通過 Java 獲取的CST時(shí)間用的是China Standard Time,而客戶端JavaScript則默認(rèn)采用的是美國的中部時(shí)間。
所以將 Fri Aug 28 09:37:46 CST 2009 加上 6 個(gè)小時(shí),再加上 8 個(gè)小時(shí),就等于 Fri Aug 28 2009 23:37:46 GMT+0800
可見,在以后的編程中為了避免錯(cuò)誤,還是不要使用CST時(shí)間,而盡量采用GMT時(shí)間。