.NET 的瑞典日历中没有 1712 年 2 月 30 日吗?
No February 30th, 1712 in .NET's Swedish calendar?
在 this wonderful talk about how weirdness in real life data reflects on computer data types, Jon Skeet tells that February had 30 days in Sweden in 1712 in a weird attempt to manage leap years while adapting to the Gregorian calendar (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 class 可能不支持 month=2 和 day=30 的实例......但是无论如何,我想知道:doesn't the .NET's Swedish calendar implement 1712 年 2 月 30 日是什么日期?还是确实如此,但我的测试不正确?
基本上 .NET 日历代码不支持公历和儒略历之间的转换...即使支持,我也不会真的期望它支持瑞典情况的古怪情况,瑞典情况不支持关注其中 个。请记住,即使在 "normal" 个案例中,切换发生在不同文化的不同时间。历史日历也有很多其他奇怪之处 - 请参阅 Noda Time trivia page 了解一些示例。我特别喜欢英国日历在 1735 年左右做一些奇怪的事情。
切换非常难以建模,因为您最终会遇到导致各种代码爆炸的间隙。你要么得到一个非常笨拙的 API ,它适用于所有情况但在所有情况下都很难使用,要么得到一个更简单的 API ,它适用于 99.999% 的软件需求,但不处理历史极端情况。一些 API(例如 Joda Time)以一种相当简单的方式对转换进行建模,但最终会导致一些 API 行为异常。
对于 Noda Time 我决定根本不尝试对此进行建模 - 如果您处于关心 19 世纪之前的日期的情况下,您很可能处于这种专家情况无论如何,你将要实现很多你自己的东西。
在 this wonderful talk about how weirdness in real life data reflects on computer data types, Jon Skeet tells that February had 30 days in Sweden in 1712 in a weird attempt to manage leap years while adapting to the Gregorian calendar (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 class 可能不支持 month=2 和 day=30 的实例......但是无论如何,我想知道:doesn't the .NET's Swedish calendar implement 1712 年 2 月 30 日是什么日期?还是确实如此,但我的测试不正确?
基本上 .NET 日历代码不支持公历和儒略历之间的转换...即使支持,我也不会真的期望它支持瑞典情况的古怪情况,瑞典情况不支持关注其中 个。请记住,即使在 "normal" 个案例中,切换发生在不同文化的不同时间。历史日历也有很多其他奇怪之处 - 请参阅 Noda Time trivia page 了解一些示例。我特别喜欢英国日历在 1735 年左右做一些奇怪的事情。
切换非常难以建模,因为您最终会遇到导致各种代码爆炸的间隙。你要么得到一个非常笨拙的 API ,它适用于所有情况但在所有情况下都很难使用,要么得到一个更简单的 API ,它适用于 99.999% 的软件需求,但不处理历史极端情况。一些 API(例如 Joda Time)以一种相当简单的方式对转换进行建模,但最终会导致一些 API 行为异常。
对于 Noda Time 我决定根本不尝试对此进行建模 - 如果您处于关心 19 世纪之前的日期的情况下,您很可能处于这种专家情况无论如何,你将要实现很多你自己的东西。