【问题标题】:Australia/Sydney time zone in java does not consider DSTjava中的澳大利亚/悉尼时区不考虑夏令时
【发布时间】:2014-06-02 16:03:27
【问题描述】:

我创建了一个 java 类,它采用给定的日期和时间,然后根据其他时区进行转换。 转换时我也必须考虑 DST。 我读到,当我们仅使用时区代码时,java 不会根据 DST 进行评估,但如果我们使用完整时区名称,则考虑 DST。 我的问题是上述方法适用于除澳大利亚/悉尼以外的其他时区。 我还读到了这篇文章:对于(美国)东部时间和(澳大利亚)东部时间使用“EST”的模糊性一直是 Java 中的一个陷阱。 但这至少应该在 TimeZone.getTimeZone("Australia/Sydney").useDaylightTime() 返回 true 时考虑 DST。

任何帮助将不胜感激。

这是我的java代码:

String timeStamp="2014-08-22 20:13 "+"MST" ;

    try
    {
            SimpleDateFormat sdfIn = new SimpleDateFormat("yyyy-MM-dd hh:mm z");
            SimpleDateFormat sdfOut = new SimpleDateFormat("EEEE, dd MMMM yyyy, HH:mm z");
            SimpleDateFormat.getDateInstance(DateFormat.LONG);
            Date datetime =sdfIn.parse(timeStamp);
            System.out.println("default without any zone  "+sdfOut.format(datetime));
            sdfOut.setTimeZone(TimeZone.getTimeZone("MST"));
            System.out.println(sdfOut.format(datetime));
            sdfOut.setTimeZone(TimeZone.getTimeZone("EST"));
            System.out.println( sdfOut.format(datetime));
            sdfOut.setTimeZone(TimeZone.getTimeZone("IST"));
            System.out.println(sdfOut.format(datetime));
            sdfOut.setTimeZone(TimeZone.getTimeZone("GMT"));       
            System.out.println(sdfOut.format(datetime));
            //it displays correct time but it display EST time zone
            sdfOut.setTimeZone(TimeZone.getTimeZone("AET"));
            System.out.println(sdfOut.format(datetime));                
            //display time with DST consideration
            System.out.println("DST time considerations");              
            sdfOut.setTimeZone(TimeZone.getTimeZone("America/Phoenix"));
            System.out.println(sdfOut.format(datetime));
            sdfOut.setTimeZone(TimeZone.getTimeZone("America/New_York"));
            System.out.println( sdfOut.format(datetime));                               
            sdfOut.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta"));
            System.out.println(sdfOut.format(datetime));
            sdfOut.setTimeZone(TimeZone.getTimeZone("Europe/London"));  
            System.out.println(sdfOut.format(datetime));
            sdfOut.setTimeZone(TimeZone.getTimeZone("Australia/NSW"));
            System.out.println(sdfOut.format(datetime));


            System.out.println(TimeZone.getTimeZone("Australia/Sydney").useDaylightTime());
            System.out.println(TimeZone.getTimeZone("Australia/NSW").useDaylightTime());
            System.out.println(TimeZone.getTimeZone("AET").useDaylightTime());


        }catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

输出: default without any zone Saturday, 23 August 2014, 08:43 IST Friday, 22 August 2014, 20:13 MST Friday, 22 August 2014, 22:13 EST Saturday, 23 August 2014, 08:43 IST Saturday, 23 August 2014, 03:13 GMT Saturday, 23 August 2014, 13:13 EST DST time considerations Friday, 22 August 2014, 20:13 MST Friday, 22 August 2014, 23:13 EDT Saturday, 23 August 2014, 08:43 IST Saturday, 23 August 2014, 04:13 BST Saturday, 23 August 2014, 13:13 EST true true true

【问题讨论】:

  • 已解决:AET 本身正在使用 DST。这就是为什么他们在使用短形式 n long from 方面没有变化。与 AET 不同,其他时区返回 false :TimeZone.getTimeZone("Australia/Sydney").useDaylightTime().. GMT,EST 不考虑 DST

标签: java timezone dst


【解决方案1】:

澳大利亚位于南半球。所以在澳大利亚,八月是冬天,夏令时不适用。请在 10 月到 3 月之间再试一次。

【讨论】:

  • +1 - Crikey Bruce,你的意思是现在不是到处都是秋天吗? :-)
  • 抱歉,我使用的月份从 10 月到 3 月没有变化
  • 在这两种情况下仍然显示相同的时间.. 他们是否有机会在仅使用“AET”时,Java 已经考虑了 DST
  • 对不起,我不明白你在问什么。
  • 悉尼在 他们的 夏季从 +10 变为 +11。在 OP 看来,Java 的 Australia/Sydney 时区没有考虑到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
  • 2020-07-08
  • 2021-05-04
  • 2013-01-28
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
相关资源
最近更新 更多