Пока я искал решения для другого вопроса, мне стало интересно, можно ли использовать Calendar
класс .NET для реализации календаря, не основанного на земных соглашениях.
Например, день Марса примерно на 2,7% длиннее, чем день здесь, на Земле:
На сегодняшний день в проектах посадочных модулей космических кораблей используется соглашение об отслеживании местного солнечного времени с использованием 24-часовых «марсианских часов», на которых часы, минуты и секунды на 2,7% длиннее их стандартной (земной) продолжительности.
Есть ли хороший способ реализовать MarsCalendar
таким образом, что длина второго отличается от стандарта GregorianCalendar
, и , таким образом , иметь возможность использовать DateTime
объекты на его основе для всех стандарт AddDays()
, AddHours()
и т.д. функции? (Примечание: в идеале решение - если оно существует - было бы применимо к любой форме планетарного объекта, для которого можно определить как «1 день», так и «1 год» постоянной длины. Тем не менее, Марс является отличным примером )
Calendar
уже поддерживается установка произвольного числа дней в году.Calendar
класс C # . Этот же класс может использоваться VB.NET или любым другим языком .NET. ЭтоCalendar
класс .NET .Ответы:
Существует несколько классов, не относящихся к григорианскому календарю, производных от
System.Globalization.Calendar
пространства имен Globalization (т.е.JapaneseCalendar
). Вы должны иметь возможность реализовать свои собственные. Я бы взял образец, но в классе Calendar есть 16 абстрактных методов ...Возможно, вы даже сможете просто унаследовать свой класс от метода
GregorianCalendar
и просто переопределитьGetMilliseconds(DateTime)
метод, возвращая возвращаемое базовое значение, умноженное на1.027d
.источник