使用 Timezone.getTimeZone (“南极洲/凯西”),某些时区将返回无效输出。例如

SimpleDateFormat outputFormat = new SimpleDateFormat( "MM/dd/yyyy hh:mm aa zzz" );
outputFormat.setTimeZone( TimeZone.getTimeZone( "Antarctica/Casey" ) );
System.out.println(outputFormat.format( new Date() ));

假设返回“MM / dd / yyyy hh:mm aa CAST ”,但返回“MM / dd / yyyy hh:mm aa WST ”。

像这样,这里还有其他一些问题,
  • 澳大利亚/阿德莱德-ACST / ACDT
  • 澳大利亚/欧克拉-ACWST / ACWDT
  • 澳大利亚/悉尼-AEST / AEDT
  • 南极/莫森-AHMT
  • 澳大利亚/珀斯-AWST / AWDT
  • Pacific / Apia-SST。
  • 最佳答案

    如果您检查the IANA Time Zone Database,则会看到Casey当前位于WST时区,并且自2012年2月以来一直存在。

    # Zone  NAME        GMTOFF  RULES   FORMAT  [UNTIL]
    Zone Antarctica/Casey   0   -   zzz 1969
                8:00    -   WST 2009 Oct 18 2:00
                            # Western (Aus) Standard Time
                11:00   -   CAST    2010 Mar 5 2:00
                            # Casey Time
                8:00    -   WST 2011 Oct 28 2:00
                11:00   -   CAST    2012 Feb 21 17:00u
                8:00    -   WST
    

    这是对该更改的更详细参考:http://www.timeanddate.com/news/time/antarctica-2012.html

    但是,仅在打印时使用WST:从内部正确地处理了从GMT + 8到GMT + 11的更改。参见例如:
    public static void main(String[] args) {
      SimpleDateFormat outputFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm aa Z");
      TimeZone tz = TimeZone.getTimeZone("Antarctica/Casey");
      outputFormat.setTimeZone(tz);
    
      Calendar c = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
    
      //May 2014 = GMT + 8
      System.out.println(outputFormat.format(c.getTime()));
    
      //january 2012 = GMT + 11
      c.set(Calendar.YEAR, 2012);
      c.set(Calendar.MONTH, 0);
      System.out.println(outputFormat.format(c.getTime()));
    }
    

    至于其他差异,可能是夏季和冬季之间的差异。

    07-24 15:27