주어진 날짜와 시간을 소요하고 다른 시간대에 따라 변환하는 자바 클래스를 만들었습니다. 변환 중에도 DST를 고려해야합니다. 시간대 코드 만 사용하면 DST에 따라 Java가 평가되지 않지만 전체 시간대 이름을 사용하면 DST가 고려됩니다. 내 문제는 위에서 언급 한 접근 방식이 호주/시드니를 제외한 다른 시간대에서 잘 작동한다는 것입니다. 나는 또한 이것을 읽었다 : 동부 표준시와 동부 표준시 모두에 '동부 표준시'를 사용하는 모호성은 영원히 자바에서 함정이었다. 그러나 TimeZone.getTimeZone ("Australia/Sydney"). useDaylightTime()이 true를 반환 할 때 DST를 고려해야합니다.자바에서 오스트레일리아/시드니 시간대가 DST를 고려하지 않습니다
어떤 도움을 주시면 감사하겠습니다.
여기 내 자바 코드 :
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을 오랫동안 사용하는 데 변화가없는 이유입니다. AET와는 달리 다른 시간대는 false를 반환합니다 : TimeZone.getTimeZone ("Australia/Sydney") useDaylightTime() .. GMT, EST는 DST를 고려하지 않습니다 – Onisha