实施非陆地日历

时间:2014-02-21 16:39:35

标签: c# .net datetime calendar

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

例如,Mars' day比地球上的一天长约2.7%:

  

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

是否有任何好的方法来实现MarsCalendar,使得一秒的长度与标准GregorianCalendar不同,从而能够使用基于它的DateTime个对象所有标准AddDays()AddHours()等功能? (注意:理想情况下,解决方案 - 如果存在的话 - 将适用于任何形式的行星物体,可以定义" 1天"和#34; 1年&#34 ;长度一致。火星是一个很好的例子,但是)

2 个答案:

答案 0 :(得分:13)

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

您甚至可以简单地从GregorianCalendar派生您的课程,只需覆盖GetMilliseconds(DateTime)方法,返回基数的返回值乘以1.027d

答案 1 :(得分:1)

答案是否定的。

日历强烈是文化的产物。
在示例中,即使在地球上也有几个日历..
对于某些文化,一天开始和结束日出,对于其他人来说,这是日落..

你可以做的是决定一个受控环境中的一些通用常数作为初始参考点......例如原子表是如何制作的......这可以帮助你获得最小的时间量......并且你可以建立一个其他措施的规模,如秒,小时,天等。
但你真的不需要那个......旋转太阳的地球已经是获得同样东西的天然来源,不需要任何构建努力......它会以令人满意的精度给你相同的结果,它有大约6个人QA'ing它不断。

火星上的日期或时间是什么时候?它和它在地球上是一样的。

如果你想“爆炸”我们如何掌握日历的统一性......通过理论化每个天体可能有自己的当地时间......没问题 - 但你必须承认那些当地时间不会有共同的通用共享规则,它们将是仲裁者并且与“文化”或每个对象的一些其他仲裁者选择相关 - 这意味着解析将是地狱计算并且必须是每个对象。
(这并不意味着我反对这个想法本身)