java - java中的澳大利亚/悉尼时区不考虑DST

标签 java timezone dst

我创建了一个java类,它接受给定的日期和时间,然后根据其他时区进行转换。 我在转换时还必须考虑夏令时。 我读到,当我们仅使用时区代码时,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();
        }

输出: 默认无任何区域 2014 年 8 月 23 日星期六 08:43 IST 2014 年 8 月 22 日星期五 20:13(太平洋标准时间) 美国东部时间 2014 年 8 月 22 日星期五 22:13 2014 年 8 月 23 日,星期六,美国标准时间 08:43 2014 年 8 月 23 日星期六 03:13 GMT 美国东部时间 2014 年 8 月 23 日星期六 13:13 DST 时间注意事项 2014 年 8 月 22 日星期五 20:13(太平洋标准时间) 2014 年 8 月 22 日星期五 23:13 美国东部时间 2014 年 8 月 23 日,星期六,美国标准时间 08:43 2014 年 8 月 23 日,星期六,英国夏令时 04:13 美国东部时间 2014 年 8 月 23 日星期六 13:13 真的 真的 真的

最佳答案

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

关于java - java中的澳大利亚/悉尼时区不考虑DST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23149137/

相关文章:

cocoa - 在 NSDateFormatter 中保留时区

javascript - 从纪元日期显示本地时间

java - 在java中获取UTC而不使用系统时间

c# - CRM 2011,插件中的日期和夏令时

java - Android 具有多个控件的 ListView

java - 当我的对象有承包商将此属性设置为 null 时,如何使用 ObjectMapper 将 json 属性的值映射到对象

java - Marshall/Unmarshall 嵌套映射与 JaxB

javascript - 如何在 JavaScript 中获取 UTC 时间戳?

sql - PostgreSQL:将间隔添加到不同时区的时间戳

java - 尝试使用 HttpURLConnection 从 url 读取信息时出现 NullPointerException