Java字串CST和時間日期的轉換
阿新 • • 發佈:2018-12-16
在工作過程中,一些業務免不了接觸到了一些對時間字串的處理,整理如下:
轉換諸如 “ Wed, 17 Oct 2018 20:17:40 CST”,“ Wed, 17 Oct 2018 20:17:40 BST”等字元時間樣式
@Test public void parseString2Date1()throws Exception{ //首先這種時間格式應該是美國時間的一種格式,因為這裡不寫上Locale.US"的話,則會拋ParseException異常 SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US); String cstStr = "Wed, 17 Oct 2018 20:17:40 CST"; String bstStr = "Wed, 17 Oct 2018 20:17:40 BST"; System.out.println(sdf.parse(cstStr)); System.out.println(sdf.parse(bstStr)); sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); System.out.println(sdf.parse(cstStr)); System.out.println(sdf.parse(bstStr)); /*系統時間若為北京時間,則輸出結果如下: Wed Oct 17 20:17:40 CST 2018 Thu Oct 18 03:17:40 CST 2018 Wed Oct 17 20:17:40 CST 2018 Thu Oct 18 03:17:40 CST 2018 */ /*系統時間若為UTC時間,則輸出結果如下: Thu Oct 18 02:17:40 UTC 2018 Wed Oct 17 19:17:40 UTC 2018 Wed Oct 17 12:17:40 UTC 2018 Wed Oct 17 19:17:40 UTC 2018 */ }
對上面的結果主要分析如下: 首先,英國的夏令時間(British Summer Time,縮寫BST)是從每年3月最後一個星期天開始,至每年10月最後一個星期天結束。 而一年中的其他時候,用格林尼治標準時間(GMT)。注意的是夏令時BST與UTC 時間相差1小時,也就是與北京時間相差7個小時。 上面的BST字串時間,無論是否指定時區,對字串BST時間不奏效,可以認為字串BST是自帶時區的,並且不可改變。 下面主要分析字元CST時間: 若系統時間為“東8區”即北京時間,則列印結果為: Wed Oct 17 20:17:40 CST 2018 但如果系統換為UTC時間,則結果為: Thu Oct 18 02:17:40 UTC 2018,這裡是02時,而不是我預期的12時 後來查了一下CST時間除了代表"中國標準時間",還可以表示"美國、澳大利亞、古巴的標準時間。 第一條列印結果是因為系統時間就在中國時區,系統即認定此處表示的就是CST中國標準時間,所以符合我的預期結果, 而第二條結果是因為系統時間為UTC時間,系統預設為此處的CST時間是“美國時間”(美國有好多種時間,這裡不細說), 查了一下,CST美國時間比UTC時間慢了6個小時,所以第二處的結果在原來時間上加上6個小時,變成了第2天的02時,這就 解釋的通了, 那麼如何在系統時間為UTC時間時,也將CST表示為中國標準時間呢? 只需要指定SimpleDateFormat的時區即可,注意,這裡指定時區對BST無影響