지구가 아닌 달력 구현


91

다른 질문에 대한 해결책을 찾고있을 때 .NET을 사용할 수 있는지 궁금합니다. Calendar 클래스를 하여 Earthly 규칙을 기반으로하지 않는 달력을 구현할 .

예를 들어, 화성의 날 은 여기 지구상의 하루보다 2.7 % 더 길다.

현재까지 우주선 착륙선 프로젝트에서 사용 된 관례는 시간, 분 및 초가 표준 (지구) 지속 시간보다 2.7 % 더 긴 24 시간 "화성 시계"를 사용하여 지역 태양 시간을 추적하는 것이 었습니다.

구현하는 좋은 방법이 있나요 MarsCalendar두 번째의 길이가 표준에서 다른되도록을 GregorianCalendar, 따라서 사용할 수 DateTime표준 모두를 위해 그것을 기반으로 개체 AddDays(), AddHours()등의 기능은? (참고 : 이상적으로 해결책은 존재하는 경우-일관된 길이의 "1 일"과 "1 년"을 모두 정의 할 수있는 모든 형태의 행성 천체에 적용 할 수 있습니다.하지만 화성은 좋은 예입니다. )


5
흠 그것은 화성인 들이 우리 기술에 의존하는 것을 처음 보는 것이 될 것입니다 : P
— user2711965

17
"오늘의 베스트 질문"배지가 있어야합니다.
— Sean

4
@DavidKhaykin-하루보다 큰 일이 일어나면 2.7 % 전환율이 떨어집니다. 시간 / 분 / 초는 회전 속도를 기준으로하며 일 / 월 / 년은 궤도 속도를 기준으로합니다. 반면에에서는 Calendar이미 연간 임의의 일수 설정을 지원합니다.
— Bobson

5
참고로, C # Calendar클래스 가 아닙니다 . 동일한 클래스를 VB.NET 또는 다른 .NET 언어에서 사용할 수 있습니다. .NET Calendar클래스입니다.
— John Saunders

4
이것은 흥미로운 일입니다. 지구 기반 달력은 화성의 시간을 추적하는 맥락에서 의미가 없습니다. 지구 시간에서 화성은 29 시간 39 분 35 초에 자전합니다. 화성의 해는 1.8809 지구의 해입니다. 그러나 화성이 당신의 기준틀이라면 그 모든 것은 의미가 없습니다. 당신의 하루는 화성이 축을 중심으로 한 번 회전하는 데 걸리는 시간입니다. 편리한 수의 조각으로 나누면 "시간"이 표시됩니다. 그것들을 나누면 분을 얻고, 그것들을 나누고 초를 얻습니다. 구분은 수학적으로 편리하며 우리가 지정한 것 이상의 의미는 없습니다.
— Craig

답변:


13

System.Globalization.CalendarGlobalization 네임 스페이스 (예 :) 내에서 파생 된 여러 비 그레고리력 달력 클래스가 JapaneseCalendar있습니다. 직접 구현할 수 있어야합니다. 샘플을 채찍질했지만 Calendar 클래스에는 16 개의 추상 메서드가 있습니다.

단순히 클래스를 파생 GregorianCalendar시키고 GetMilliseconds(DateTime)메서드를 재정 의하여베이스의 반환 값에를 곱한 값을 반환 할 수도 있습니다 1.027d.


2
흥미 롭군. 더 큰 시간 증분까지 전파됩니까, 아니면 각각을 개별적으로 재정의해야합니까?
— Bobson 2014

2
다른 달력에 대해 조금 더 조사한 후 GregorianCalendar와 다른 달력이 모든 GetX 메서드 뒤에있는 수학을 위해 전달 된 각 DateTime의 Ticks 속성을 사용한다고 생각합니다. DayOfYear, DayOfMonth 및 DayOfWeek 속성이 기본 값으로 고정되기 때문에 DateTime 값이 복잡해집니다. 이 내장의 System.Globalization 네임 스페이스에는 일정이 없습니다 더 나는 재정의 할 수 없습니다 그 클램프 값을 추측하고있어, 그래서 당신이해야 할 수도 있으므로 (일부 적은 일을하지만) 12 개월 이상 365 일, 자신의 DateTime 구조.
— 마이클 호프만
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.