2013-12-23 11 views
0

전 세계 사람들이 사용할 Java 응용 프로그램을 개발 중입니다. 한 가지 기능은 호주 멜버른에 현재 시간을 표시해야한다는 것입니다.자바에서 다른 나라의 인터넷 시간을 확인하십시오.

나는 this 답을 찾았으며 다음과 같이 코드를 수정했지만 현재 시간 (예상대로)을 반환합니다. 그것은 사용하는 Apache Commons Net library :

try { 
     String TIME_SERVER = "time-a.nist.gov"; 
     NTPUDPClient timeClient = new NTPUDPClient(); 
     InetAddress inetAddress = InetAddress.getByName(TIME_SERVER); 
     TimeInfo timeInfo = timeClient.getTime(inetAddress); 
     long returnTime = timeInfo.getMessage().getTransmitTimeStamp().getTime(); 
     return new Date(returnTime); 
    } catch (Exception e) { 
     System.out.println(e.getMessage()); 
     return null; 
    } 
차라리 내 시간보다, 멜버른의 시간을 반환하는이 코드를 수정하는 방법

? 나는이 문제를 해결하기 위해 다른 솔루션에 대해서도 개방적이다.

고맙습니다!

는 편집 :

존의 조언을 촬영, 나는 JodaTime library을 사용하여 문제를 해결하기 위해 다음 코드를 구축했다. 호주/멜버른을 any timezone found here으로 변경하여 다른 시간대에 사용할 수 있습니다.

try { 
     //Get the time for the current time zone. 
     String TIME_SERVER = "time-a.nist.gov"; 
     NTPUDPClient timeClient = new NTPUDPClient(); 
     InetAddress inetAddress = InetAddress.getByName(TIME_SERVER); 
     TimeInfo timeInfo = timeClient.getTime(inetAddress); 
     long returnTime = timeInfo.getMessage().getTransmitTimeStamp().getTime(); 

     //Format it to the Melbourne TimeZone. 
     DateTimeZone tzMelbourne = DateTimeZone.forID("Australia/Melbourne"); 
     return new DateTime(returnTime).toDateTime(tzMelbourne); 
    } catch (Exception e) { 
     System.out.println(e.getMessage()); 
     return null; 
    } 

답변

6

당신은 현재 java.util.Date를 반환하고 - 시간대하지 않습니다. 그것은 단지 순간적입니다. 그것은 귀하의 시간대 나 다른 시간대가 아닙니다. 단지 순간적입니다. toString()으로 전화하면 현지 표준 시간대에 텍스트로 표시되지만 대상에있는 데이터의 일부가 아닙니다. 당신이 "특정 시간대에 날짜/시간"을 표현해야하는 경우

는 당신이 Calendar 클래스를 사용한다, 또는 이상적으로 훨씬 더 나은 날짜/시간 API 인 Joda Time를 사용합니다. 그냥 형식 날짜/특정 시간대에 시간을하려는 경우

또는, 당신은 SimpleDateFormat을 사용할 수 있습니다 - 시간대를 설정 한 다음 이미 반환하고있는 Date 값을 포맷합니다.

1

체크 this. 달력 인스턴스를 가져 와서 시간대를 변경할 수 있습니다.

2

NTP 서버를 사용하는 대신 java.util.TimeZone을 사용하여 전 세계 특정 장소 시간을 확인할 수 있습니다. (낮 광 절약에 대해서도 알고 있습니다) 시간대 ID가 '호주/멜버른'입니다.

TimeZone australiaMelbourneTimeZone = TimeZone.getTimeZone("Australia/Melbourne"); 

Calendar dateTime = Calendar.getInstance(tz); 

//Use this Calendar instance to print time 

없음 :

for(String timeZoneID: TimeZone.getAvailableIDs()) { 
      System.out.println(timeZoneID); 
    } 

출력과 같이 '호주/멜버른'을 포함 : 나는 다음과 같이 java.util.TimeZone의 지원하는 모든 사용 가능한 시간대 ID를 덤프하여 시간대 ID Australia/Melbourne을 발견했다 다음과 같습니다 :

... 호주/브리즈번 호주/캔버라 호주/커리 호주/호바트 호주/린드 호주/멜버른 호주/뉴 사우스 웨일즈 호주/퀸즐랜드 호주/시드니 호주/태즈 메이 니아