[英]Australia/Sydney time zone in java does not consider DST
我创建了一个 java 类,它采用给定的日期和时间,然后根据其他时区将其转换。 我还必须在转换时考虑 DST。 我读到当我们只使用时区代码时,java 不会根据 DST 进行评估,但如果我们使用完整的时区名称,则考虑 DST。 我的问题是上述方法适用于除澳大利亚/悉尼以外的其他时区。 我还读到:(美国)东部时间和(澳大利亚)东部时间使用“EST”的歧义一直是 Java 的一个陷阱。 但这至少应该在 TimeZone.getTimeZone("Australia/Sydney").useDaylightTime() 返回 true 时考虑夏令时。
任何帮助,将不胜感激。
这是我的 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
澳大利亚位于南半球。 所以在澳大利亚,八月是冬天,夏令时不适用。 请在 10 月和 3 月之间的某个日期再试一次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.