1712年2月30日在.NET的瑞典日历中?

时间:2015-09-22 12:17:17

标签: .net date calendar

this wonderful talk about how weirdness in real life data reflects on computer data typesJon Skeet说明二月在瑞典有一个30天的日子,这是一个奇怪的尝试来管理闰年,同时适应格里高利历(more on this in Wikipedia)。出于纯粹的好奇心,我打开了LINQPad并写了以下内容:

var date=new DateTime(1712,2,29,CultureInfo.GetCultureInfo("sv-SE").Calendar);
date.AddDays(1).Dump();

我期待在2月30日看到一个令人惊讶的惊人,但这只会产生一个无聊的3月1日。关于它的两次思考,.NET DateTime类可能不支持month = 2和day = 30的实例......但无论如何,我想知道:.NET的瑞典日历是不是实现了1712年2月30日日期?或者它实际上但我的测试不正确?

1 个答案:

答案 0 :(得分:2)

基本上.NET日历代码不支持公历和儒略历之间的切换......即使它确实如此,我也不会真的期望它支持瑞典情况的奇怪,它没有跟随 。请记住,即使在"正常"在不同的文化中,切换发生在不同的时间。历史日历周围还有很多其他奇怪的东西 - 请参阅Noda Time trivia page的一些例子。我非常喜欢英国日历在1735年左右做奇怪的事情。

切换很难建模,因为最终会出现间隙,导致各种代码爆炸。您要么最终得到一个令人难以置信的笨拙的API,它适用于所有情况,但在所有情况下都很难使用,或者是一个更简单的API,它可以满足99.999%的软件需求,但不能处理历史角落案例。一些API(例如Joda Time)以一种相当简单的方式对切换进行建模,但最终会出现一些奇怪的API行为。

对于Noda Time我决定不试图对此进行建模 - 如果您处于关注19世纪之前的日期的情况下,您很可能会在这样的情况下无论如何,你将会实施很多自己的东西。