2014-04-18 8 views
1

주어진 날짜와 시간을 소요하고 다른 시간대에 따라 변환하는 자바 클래스를 만들었습니다. 변환 중에도 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

+0

해결 : AET 자체가 DST를 사용 중입니다. 그 이유는 짧은 양식 n을 오랫동안 사용하는 데 변화가없는 이유입니다. AET와는 달리 다른 시간대는 false를 반환합니다 : TimeZone.getTimeZone ("Australia/Sydney") useDaylightTime() .. GMT, EST는 DST를 고려하지 않습니다 – Onisha

답변

2

호주는 남반구에 있습니다. 호주에서는 8 월이 겨울이며 일광 절약은 적용되지 않습니다. 10 월에서 3 월 사이의 날짜로 다시 시도하십시오.

+2

+1 - Crikey Bruce, 지금은 어디에도 가을이 아님을 의미합니까? ? :-) –

+0

죄송 합니다만, 10 월에서 12 월까지 사용했을 때 변경되지 않았습니다 – Onisha

+0

여전히 두 경우 모두 같은 시간이 표시됩니다 .. "AET"만 사용하는 동안 자바가 DST를 고려했습니다 – Onisha

관련 문제