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无影响

你可能感兴趣的:(Java中字符串CST的时间日期转换)