1. 程式人生 > >Java字串CST和時間日期的轉換

Java字串CST和時間日期的轉換

在工作過程中,一些業務免不了接觸到了一些對時間字串的處理,整理如下:

轉換諸如 “ 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無影響