2011-08-25 4 views
0

내 컴퓨터 중 하나에서 완전히 이상한 문제가 있습니다. 나는 서버에서 이벤트를 모니터링하고 모니터링 PC에 표시하는 프로그램을 작성했습니다. = ": mm : YYYY-MM-DD HH SS" 공공 정적 최종 문자열 DATE_FORMAT_NOW와의심스러운 JVM 시간 동작

Calendar cal = Calendar.getInstance(); 
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW); 
return sdf.format(cal.getTime()); 

그러나, 각 이벤트 상태 메시지는 다음과 같은 호출에 의해 검색되고있는 타임 스탬프를 포함;

오늘까지이 호출이 현지 시간을 반환 할 것으로 기대하고 있습니다. 하지만 이제는 내 프로그램에서 모든 수신 이벤트에 대해 현지 시간 +3 시간을 표시합니다. jar 파일을 다시 시작해도 전혀 도움이되지 않으며 시스템 시간도 올바르게 설정됩니다. 이 프로그램은 시간을 중앙 기업 시계와 동기화하는 시스템에서 실행됩니다.

누구나 언급 한 동작을 설명 할 수 있습니까? 그리고/또는 "컴퓨터를 다시 시작하고 다시 시도하십시오"라는 가능한 해결책을 제시 할 수 있습니까 ?-)?

절벽 : - 대상 기계 24를 실행하고 아무도이 어떤 옵션을 변경하지 않습니다 만 모니터링 기계입니다 - 시간의 Retrival 내 - 또는 다른 컴퓨터에서 작동하고 나는 프로그램 시작할 때 - 오늘까지 제대로 작동했습니다. - Hostsystem의 모든 시간/시간대 설정 (Windows XP)이 정확합니다. (CMD -> "날짜"및 시스템 환경 설정을 통해 확인)

이 문제에 대한 답변을 보내 주시면 감사하겠습니다. 시간 내 주셔서 감사합니다!


질문은 이미 25 일 이후 답변되었습니다. Timezone.setDefault()를 명시 적으로 호출하여 적절한 시간대가 전체 시간에 표시되는지 확인했습니다. 지금이 질문을 닫을 것입니다.

답장을 보내 주셔서 감사합니다.

+0

시간대를 확인 했습니까? – THelper

+0

안녕하세요, 시스템 측의 모든 날짜 및 시간 옵션이 정확합니다. – Markus

+0

Calendar 및 SimpleDateFormat 객체의 시간대를 의미했습니다. – THelper

답변

1

이 코드 :

cal.getTime() 

Date 오브젝트를 돌려줍니다. Date 개체는 UTC 시간의 래퍼 일 뿐이므로 long입니다. 우리가 보여준 코드에서, 정확하게 할 수 있습니다. sdf.format(new Date());

DATE_FORMAT_NOW의 형식은 무엇입니까? 나는 너 자신이 이것을 지정했다고 생각한다. 이 형식으로 시간대를 지정합니까?

EDIT 의견에서 언급했듯이 DATE_FORMAT_NOW는 시간대를 지정하지 않습니다. Timezone.getDefault()sdf.getTimezone()을 모두 수행하여 값이 로케일 + 3 시간으로 변경되었는지 확인해야합니다.

EDIT2 시간이 산발적으로 변하는 약 this forum post이 발견되었습니다. 이 경우 오라클 드라이버가 메서드 중간에 Timezone.setDefault(...)을 호출 한 다음 나중에 다시 설정합니다.

+0

안녕하세요, 그것은 정적 정적 최종 문자열입니다 DATE_FORMAT_NOW = "yyyy-MM-dd HH : mm : ss"; .위에서 언급 한 코드는 오늘까지 제대로 작동했습니다. 내 컴퓨터 또는 다른 컴퓨터에서 프로그램을 시작하면 여전히 올바르게 작동합니다. 프로그램을 실행중인 컴퓨터는 연중 무휴로 운영됩니다. – Markus

+1

'sdf.getTimeZone()'은 무엇을 반환합니까? – Bringer128

+0

안녕하세요, 아시아/카라치가 잘못된 시간대를 표시합니다. gettime 명령은 여전히 ​​잘못된 시간을 반환합니다. 그러나 시스템 시간은 현지 시간 (표준 시간대 : GMT + 2)으로 올바르게 설정됩니다. JVM이 자동으로 시간대를 변경하는 방법은 무엇보다 중요한가? 런타임 중에 어떻게 다시 변경할 수 있습니까? – Markus