GregorianCalendar.getInstance에 Calsys와 CDATE 유형 Julian Calendar가 포함되어 있습니까?

StackOverflow https://stackoverflow.com/questions/1536148

문제

기본값을 가진 준비 상태로 날짜 값을 설정하려고했지만 값은 때때로 JulianValue로 반환됩니다. 예를 들어 (spanbegin과 spanend가 null이라고 가정)

Calendar cal = new GregorianCalendar();
if (spanBegin == null) {
    cal.set(0000, Calendar.JANUARY, 1);
    spanBegin = cal.getTime();
}

if (spanEnd == null)
{
    cal.set(9999, Calendar.DECEMBER, 31);
    spanEnd = cal.getTime();
}

3 번 라인에서, 1 월 1 일 날짜 이후 0000은 줄리안 달력에 의해 범위가 져있다. 그러나 다음 날짜는 9999 년에도 CDATE가 여전히 줄리안 캘린더가됩니다. 문제를 해결하기 위해 Gregorian Calendar의 또 다른 인스턴스를 만들어야했습니다.

Calendar cal = new GregorianCalendar();
if (spanBegin == null) {
    cal.set(0000, Calendar.JANUARY, 1);
    spanBegin = cal.getTime();
}

Calendar cal = new GregorianCalendar();
if (spanEnd == null)
{
    cal.set(9999, Calendar.DECEMBER, 31);
    spanEnd = cal.getTime();
}

문제는 이것이 예상되는 동작 또는 날짜 개체의 버그입니까? 실제로 GregorianCalendar.getInstance ()를 사용하면 CDATE가 때때로 JulianCalendar로 설정되어 있음을 보여줍니다.

도움이 되었습니까?

해결책

어떤 버전의 Java를 사용하고 있습니까? 0과 9999 년에 날짜를 저장해야합니까, 아니면 "음의 무한대"및 "긍정적 인 무한"값으로 사용하고 있습니까? 달력이 줄리안 달력이라는 것을 정확히 어떻게 보십니까?

나는 이것을 시도했다 :

Calendar cal = Calendar.getInstance();

cal.set(0, Calendar.JANUARY, 1);
Date d1 = cal.getTime();

cal.set(9999, Calendar.DECEMBER, 31);
Date d2 = cal.getTime();

System.out.println(d1);
System.out.println(d2);

출력 (Windows XP, Sun Java 1.6.0_16 사용) :

Thu Jan 01 09:53:56 CET 1 java.util.Date
Tue Dec 31 09:53:56 CET 9999 java.util.Date

0 년을 연도로 변경합니다. 1. 두 번째 날짜의 두 번째 달력 개체를 사용하도록 코드를 변경합니다.

Calendar cal = Calendar.getInstance();

cal.set(0, Calendar.JANUARY, 1);
Date d1 = cal.getTime();

Calendar cal2 = Calendar.getInstance();
cal2.set(9999, Calendar.DECEMBER, 31);
Date d2 = cal2.getTime();

System.out.println(d1);
System.out.println(d2);

이것은 출력이나 두 가지 내용에 아무것도 바꾸지 않습니다. Date 사물.

참고 : 0으로 시작하는 정수 리터럴 (예 : 0000 코드에서 Java 컴파일러에 의해 Octal 번호로 해석됩니다. 이 경우에는 숫자가 0이기 때문에 중요하지 않지만 옥탈 숫자로 의미하지 않으면 Zeroes로 정수 리터럴을 배정해서는 안됩니다.

다른 팁

1582 년까지 Gregorian 달력은 없었습니다. Julian 달력은 유럽 전역에서 사용되었습니다. 태양 연도가 정확히 365.25 일이 아니라 그보다 약간 적다는 사실로 인해 사소한 문제가 나타나기 시작할 때까지 유럽 전역에서 사용되었습니다. 사물을 고치기 위해 교황 그레고리 XIII은 오늘날 우리가 알고있는 것으로 달력을 바꾸라고 명령했다. 10 월 15 일이었다. 이것은 1582 년 10 월까지 그레고리안과 줄리안 달력이 동일하다는 것을 의미한다. 그것에 대해 더 많이 읽을 수 있습니다 여기

이것이 1582 년 10 월 이전 날짜가 Julian 시스템을 사용하도록 변환되는 이유입니다. 에 따르면 API 실제로 역사적 사건을 대표해야한다면 (여기서는 그렇지 않은 것 같음) 3 월 1 일부터 4AD에서만 할 수 있습니다.

Julian 달력에서는 0 년이 아닙니다. 기원전 1 세에서 1 세기까지갑니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top