업데이트 된 캘린더 객체에서 getTimeInMilliseconds()를 호출 할 수 있도록 실제 날짜/시간을 유지하면서 캘린더 객체의 시간대를 변경하려고합니다.JAVA : 날짜/시간을 변경하지 않고 Calendar 객체의 TimeZone을 변경할 때 이상한 동작이 발생했습니다.
나는 this other question을 보았다. 여기서 허용되는 대답은 새 Calendar 객체의 각 필드를 개별적으로 설정하는 것입니다. 그러나 원래 캘린더 개체 복사본의 표준 시간대를 변경하는 것만으로 간단하게 작업 할 수있었습니다. 이상한 것은 timeZone을 재설정하기 전에 원래 일정을 약간 수정 한 경우에만 작동합니다. 다음 예는 불일치를 설명합니다.
public void TestCalendar()
{
Calendar nextYear = Calendar.getInstance();
nextYear.add(Calendar.YEAR, 1);
log.info("Next Year: {}", getUTCMilliseconds(nextYear));
Calendar now = Calendar.getInstance();
log.info("Now: {}", getUTCMilliseconds(now));
}
protected String getUTCMilliseconds(Calendar cal)
{
// Create a new calendar so we don't modify input
Calendar expectedDbTime = (Calendar) cal.clone();
// Change the TimeZone the contained date is interpreted in
expectedDbTime.setTimeZone(TimeZone.getTimeZone("UTC"));
// Return millisecond value of this date in the UTC timezone
return String.valueOf(expectedDbTime.getTimeInMillis());
}
내가 2:33 @ 오후 월 24 일이 프로그램 2015을 실행하고, 다음과 같은 결과를 얻었다 :
Next Year: 1422110038529 //(Corresponding UTC Date: Sat Jan 24 2015 2:33:58 PM)
Now: 1390599238531 //(Corresponding UTC Date: Fri Jan 24 2014 9:33:58 PM)
당신은, 예상대로 nextYear 인쇄 그러나 다음 줄을 볼 수 있듯이 이 예상대로 아닙니다 (2014 년 1 월 24 일 오후 2시 33 분 58 초에 대응해야하며 대신 2012 년 1 월 24 일 2:33:58 MTT 인 현재 날짜/시간에 해당). 누군가 여기서 무슨 일이 일어나는지 말해 줄 수 있니?
편집 : 일부 서식을 업데이트했습니다.
setTimeZone'의 동작은()'매우 직관적이고 효과적으로 깨진입니다. 이 동작에 대해 제기 된 몇 가지 버그가 있습니다. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4827490 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id= 4177484 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4096231 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4227735 –
귀하의 질문이 아닌 @goparkyourcar 명확한. 정확히 무엇부터 시작하고 싶습니까? 그리고 출력으로 무엇을 원하십니까/기대합니까? –
의도는 특정 시간대 (일요일 12/01 1 월 12 일 MTN)에서 일부 날짜/시간을 나타내는 Calendar 객체가 주어진 경우 다른 날짜 영역에서 같은 날짜의 밀리 초 값을 가져 오려고합니다 (Say 2012 년 1 월 1 일 1시 12AM UTC). 이것에 관한 내 질문은 왜 제대로 작동하려면 함수를 얻으려면 내 getUTCMilliseconds() 함수를 호출하기 전에 캘린더 개체를 수정해야합니다. – Cod3Citrus