Calendar.set()을 사용하여 주어진 날짜 값에 대한 시간의 시작을 반환하는 코드가 있습니다.Java Calendar : 표준시로 오전 1시 전환 (DST에서)
public void testStartOfHourDST1() {
Calendar cal = Calendar.getInstance();
long time = 1352005200000L; // Nov 4, 2012, 1AM EDT
cal.setTimeInMillis(time);
cal.set(Calendar.MILLISECOND, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
System.out.println(new Date(time));
System.out.println(new Date(cal.getTimeInMillis()));
System.out.println(System.getProperty("java.version"));
assertEquals(cal.getTimeInMillis(), time); // fails
return;
}
OUPUT :
일 11월 4일 01:00:00 EDT 2012
을 - (EDT EST로 전환 동부 시간대) 나는 일요일 11 월 4, 2012에 다음과 같은 문제가 발생 일 11월 4일 동부 표준시 01시 00분 0초 2012
1.6.0_35
Perha 추신 : 이것은 캘린더를 사용하는 올바른 방법이 아니지만 다음 시간 (또는 이전 시간)에 대해 동일한 테스트를 실행해도 문제가 없습니다. 이것이 JVM 문제입니까?
감사
좋은 점. 따라서 Calendar는 setTime/setTimeInMillis를 사용하거나 @Nambari에서 언급 한 setTimeZone을 사용하는 경우를 제외하고이 두 개의 겹치는 시간을 모호하게하는 방법을 지원하지 않습니다. – monex0
캘린더가 _ 최근의 시간 _을 사용하고 있거나 기본 시간대를 적용하고 있습니까? 달력이 생성 될 때 (일광 절약 시간 전환이 발생한 후 프로그램이 실행될 경우 EST가됩니다) ... 대답을 모른다. – jahroy
@jahroy java.util 그레고리 안 캘린더 (GregorianCalendar)는 임의적 인 대회의 일광 절약 시간이 아닌 표준 시간으로 항상 그 날의 1 : 00-1 : 59를 해석 할 것임을 나타냅니다. "... 여기, 오전 1시 - 오전 1시 59 분은 표준 또는 DST 일 수 있으며 둘 다 유효한 표현입니다 (DST는 1:59:59 DST에서 1:00:00 표준으로 점프 함). 다시 표준 시간을 가정합니다. " – Affe