2011-05-11 2 views
4

나는 동쪽에있는 노스 캐롤라이나 주에 거주하고 있습니다. 그래서 나는이 코드를 컴파일하고 실행하며 똑같은 것을 출력한다. 설명서에 따르면 java.util.date가 UTC 시간을 반영하려고합니다.Java.util.Date : UTC와 ET를 더 이해하려고합니다.

Date utcTime = new Date(); 
Date estTime = new Date(utcTime.getTime() + TimeZone.getTimeZone("ET").getRawOffset()); 
DateFormat format = new SimpleDateFormat("dd/MM/yy h:mm a"); 
System.out.println("UTC: " + format.format(utcTime)); 
System.out.println("ET: " + format.format(estTime)); 

는 그리고 이것은 내가

UTC: 11/05/11 11:14 AM 
ET: 11/05/11 11:14 AM 

을 얻을하지만 모두 다른 시간을 반영하려고이 website에 가면, UTC와 ET가 다른 것입니다.

답변

7

getRawOffset()이기 때문에 이유는 0 반환 0을 반환 - 그건 나를 위해 "동부 표준시"뿐만 아니라, 사실 TimeZone.getTimeZone("ET") 기본적으로 그리니치 표준시를 반환합니다. 나는 그것이 당신이 의미하는 바가 아닌 것으로 의심합니다.

노스 캐롤라이나 최고의 올슨 시간대 이름은 "America/New_York"입니다.

표준 시간대의 원시 오프셋을 UTC 시간에 추가하면 안되며 포맷터의 표준 시간대를 대신 설정해야합니다. A Date 값은 실제로 시간대에 대해 알지 못합니다 ... 1970 년 1 월 1 일부터 항상 밀리 초입니다.

다음과 같이 사용할 수 있습니다.

import java.text. ; 가져 오기 java.util.;

Date date = new Date(); 
DateFormat format = new SimpleDateFormat("dd/MM/yy h:mm a zzz"); 

format.setTimeZone(TimeZone.getTimeZone("America/New_York")); 
System.out.println("Eastern: " + format.format(date)); 

format.setTimeZone(TimeZone.getTimeZone("Etc/UTC")); 
System.out.println("UTC: " + format.format(date)); 

출력 :

Eastern: 11/05/11 11:30 AM EDT 
UTC: 11/05/11 3:30 PM UTC 

나는 또한 당신이 대신 Joda Time를 사용하여 조사하는 것이 좋습니다 것입니다 내장 된 라이브러리 - 그것은 훨씬 더 나은 API입니다.

+0

시간에 대한 또 다른 질문이 있습니다. http://stackoverflow.com/questions/5968842/compare-the-current-est-to-2pm-est-how. 네가 나를 도울 수 있다고 생각하니? –

1

TimeZone.getTimeZone ("ET")의 TimeZone.getTimeZone("ETS")를 작성 habe 여기에 잘못 했는가. getRawOffset은()이다

1

Eastern Standard Time의 약어는 "ET"가 아니라 "EST"입니다. getRawOffset() 메서드는 알 수없는 표준 시간대를 통과하면 0을 반환합니다.

TimeZone.getTimeZone("EST").getRawOffset() 

또한 utcTime 변수를 출력하면 UTC 시간이 출력되지 않습니다. 해당 시간대에 거주하고 있기 때문에 EST 시간을 출력하고 있습니다. 내가 이해 한대로 Date 클래스는 내부적으로 UTC로 시간을 저장하지만 사용자가 읽을 수있는 문자열로 출력하기 위해 서식을 지정할 때 현재 로캘/시간대를 고려합니다.

관련 문제