执行非地球日历

当我在寻找另一个问题的解决方案时,我发现自己在考虑是否可以使用。NET 的 Calendar类来实现一个不基于地球约定的日历。

例如,火星日比地球上的一天长2.7% :

迄今为止,航天器着陆器项目使用的惯例是使用24小时的“火星时钟”来跟踪当地的太阳时间,其中的小时、分钟和秒比其标准(地球)持续时间长2.7% 。

有没有什么好的方法来实现一个 MarsCalendar,使一秒钟的长度不同于标准的 GregorianCalendar,从而能够使用基于它的 DateTime对象的所有标准的 AddDays()AddHours()等功能?(注意: 理想情况下,一个解决方案-如果存在的话-将适用于任何形式的行星天体,其中有可能定义“1天”和“1年”的一致长度。不过,火星就是一个很好的例子。)

1552 次浏览

There are several non-Gregorian calendar classes derived from System.Globalization.Calendar within the Globalization namespace (i.e. JapaneseCalendar). You should be able to implement your own. I'd whip up a sample, but there are 16 abstract methods in the Calendar class...

You might even be able to simply derive your class from GregorianCalendar and just override the GetMilliseconds(DateTime) method, returning the base's return value multiplied by 1.027d.