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

Kon*_*man 5 .net calendar date

这个关于现实生活中数据如何反映计算机数据类型的奇妙讨论中,Jon Skeet说,二月在瑞典有一个30天的日子,这是一个奇怪的尝试来管理闰年,同时适应格里高利历(维基百科更多内容) .出于纯粹的好奇心,我打开了LINQPad并写了以下内容:

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

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

Jon*_*eet 2

基本上.NET日历代码不支持公历和儒略历之间的转换...即使支持,我也不会真正期望它支持瑞典情况的奇怪之处,瑞典情况不遵循其中任何一个他们。请记住,即使在“正常”情况下,切换也会在不同文化中的不同时间发生。历史日历还有很多其他奇怪的地方 - 请参阅野田时间琐事页面以获取一些示例。我特别喜欢英国日历在 1735 年左右做奇怪的事情。

切换很难建模,因为最终会出现间隙,从而导致各种代码崩溃。您最终要么得到一个极其笨重的 API,它适用于所有情况,但很难在所有情况下使用,要么得到一个更简单的 API,它适用于 99.999% 的软件需求,但不能处理历史极端情况。某些 API(例如Joda Time)以相当简单的方式对切换进行建模,但最终导致某些 API 的行为异常。

对于野田时间,我决定根本不尝试对此进行建模 - 如果您处于关心 19 世纪之前的日期的情况,那么您很可能处于如此特殊的情况,以至于您将要实现无论如何,有很多你自己的东西。