지구가 아닌 달력 구현


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.