在C#/ .NET中处理基督之前的日期的最佳方法是什么?

时间:2009-05-18 11:59:09

标签: c# .net datetime

是否有内置支持?如果没有,是否有关于处理此类日期的共识?


非常欢迎链接到自己编码的解决方案或其片段。

3 个答案:

答案 0 :(得分:9)

此范围内的日期没有内置支持,因此您必须自己编写代码。

以下是http://flipbit.co.uk/2009/03/representing-large-ad-and-bc-dates-in-c.html示例。

答案 1 :(得分:4)

如果您正在引用DateTime值的处理< DateTime.MinValue,那么我认为唯一的“共识”是不使用System.DateTime来尝试表示它们。

任何共识都可能仅存在于与此类日期有关的社区内。你工作的地区是什么?天文学?


无论感兴趣的领域是什么,都可能有其他人遇到过同样的问题。我会先做一些研究,特别是如果你的日期需要与同一领域的其他软件进行互操作。即使您必须编写自己的代码,您至少也可以了解其他人在编写他们的所拥有的问题时。

答案 2 :(得分:2)

我知道这个问题已经过时了,但我在搜索中找到了这个问题,并且可以为此主题添加其他信息。在上面的评论中,有人认为日期差异大于1年。除非有人计划在确切的日期之前很久才能回归到某个时间(数千年),否则情况并非如此。 Julian日期和日期所需的差异格里高利日期只是少数天,对于任何可以合理地试图从现存历史记录中得出的特定日期,肯定少于3周。为此目的有转换表。我认为更大的问题来自于转换为公历。

不同的国家/地区在不同的时间进行转换,因为它们没有同时转换,因此在转换时会丢失不同的天数。有关如何进行转换的示例,请想象今天是10月1日,明天将是10月10日。在这种情况下,转换将导致该特定国家/地区损失9天。另一个在一段时间之后转换的国家可能已经失去了11天,或12天,或13天等。另一个大问题是试图在特定日期推出季节。由于日历不精确,昼夜平分点的岁差导致了一年中某些季节的快速进展。今天我们在七月份的北半球夏天。 3000年前,如果我们使用朱利安历法作为我们的标准,这个日历月可能发生在冬季中。

值得注意的是,在古代世界中使用了各种各样的古代日历系统。太阳和月球品种都存在,直到大约2000年前(当朱利安历法发明时),没有现实的标准化尝试。人们经常试图将朱利安日期更多地投射回历史,但这些努力是不合时宜的。由于记录不一致导致的不确定性,不可能确定在与朱利安日历相关的特定日期发生的特定事件,除了涉及相当大的误差范围的圆形方式。对于在公元前一千年之前发生的事件,该误差幅度可能是50年或100年(或某些时期更长)。我们根本没有记录来建立极其准确的时间表。来自与现有记录相关的树环序列的碳日期有助于缩小各个区域和时期的误差范围,但它们并不构成完全连通的记录,我们总是会有一个误差范围来处理。