实施非陆地日历

Bob*_*son 88 .net c# datetime calendar

当我在寻找另一个问题的解决方案时,我发现自己想知道是否可以使用.NET的Calendar类来实现不基于地球惯例的日历.

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

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

有没有实施什么好办法MarsCalendar,这样第二的长度是不同的标准GregorianCalendar,从而能够使用DateTime基于它的对象为所有的标准AddDays(),AddHours()等等的功能呢? (注意:理想情况下,解决方案 - 如果存在的话 - 将适用于任何形式的行星物体,可以定义一致长度的"1天"和"1年".火星是一个很好的例子,尽管)

Mic*_*ann 13

System.Globalization.Calendar在Globalization命名空间(即JapaneseCalendar)中派生了几个非公历日历类.你应该能够实现自己的.我打造了一个示例,但Calendar类中有16个抽象方法......

您甚至可以简单地从中派生您的类GregorianCalendar并且只是覆盖该GetMilliseconds(DateTime)方法,返回基数的返回值乘以1.027d.

  • 有趣.这会传播到更大的时间增量,还是我必须单独覆盖每一个? (2认同)
  • 在对其他日历进行更多研究之后,我猜想 GregorianCalendar 和其他日历使用传递给它的每个 DateTime 的 Ticks 属性来计算其所有 GetX 方法背后的数学。DateTime 值变得复杂,因为 DayOfYear、DayOfMonth 和 DayOfWeek 属性被限制为地球值。System.Globalization 命名空间中没有 ** 超过 12 个月或超过 365 天的日历(尽管有些天数更少),所以我猜这些限制值不能被覆盖,所以你可能需要你自己的 DateTime 结构。 (2认同)