发现.Net的一个Bug:公元1500年是闰年,事实上2月是有29天的,但是.Net里边只有28天

yespie 2011-11-15 02:46:49
公元1500年是闰年,事实上2月是有29天的,但是很奇怪:

如果在.Net(C#)里运行如下代码是正常的:
DateTime dt = DateTime.Parse("1500-02-27");
dt = dt.AddDays(1);

但是,如果代码改为:
DateTime dt = DateTime.Parse("1500-02-29");

DateTime dt = DateTime.Parse("1500-02-28");
dt = dt.AddDays(1);

就会提示:该字符串未被识别为有效的 DateTime。
...全文
366 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yespie 2011-11-20
  • 打赏
  • 举报
回复
其实,我也没完全搞错,是我不对古代历法不了解:

这篇Blog上有详细介绍:
http://blog.sina.com.cn/s/blog_487ab9d5010007fa.html

这是因为公历是从1582年10月15日才开始执行的,之前的纪年、纪日都是儒略历的纪年、纪日。在历史上,罗马历法一共有三次重大变革。首先是公元前46年(罗马纪元708年),罗马执政官儒略·恺撒(Julius Caesar)下令从次年(公元前45年)起行用新历法。当时罗马人一直用一种很不成熟的阴阳历,为了实现这种旧历和新历之间的平稳转换,这一年多加了两个月,竟长达445天,史称“乱年”(拉丁文annus confusionus,英文the year of confusion)。和这种旧历不同,新历是纯粹的阳历,规定每四年一闰,单月31天,双月(除二月外)30天,平年的二月29天,闰年加一天,即也是30天。因为新历法的岁首比旧历提前了两个月(即以旧历11月1日为新历元旦),但是月份名称仍然使用旧历的名称,所以现在公历9-12月的英文月份名分别是September, October,

。。。。。。
所有1500年是属于 儒略历 ,所以是闰年,是有29天。
wanghui0380 2011-11-16
  • 打赏
  • 举报
回复
呵呵,闰年判定可不是能被4整除一个条件
kkbac 2011-11-16
  • 打赏
  • 举报
回复
铜臂阿铁木 2011-11-16
  • 打赏
  • 举报
回复


我也一下子感觉1500年是闰年了……好吧,我愚钝了。小时候肯定明白这是咋回事的。
wiki14 2011-11-16
  • 打赏
  • 举报
回复
accomp 2011-11-16
  • 打赏
  • 举报
回复
闰年是 公历纪年法中,能被4整除的大多是闰年,除了那些能被100整除而不能被400整除的年份以外
天二天 2011-11-16
  • 打赏
  • 举报
回复
原来如此
阿非 2011-11-15
  • 打赏
  • 举报
回复
1500年不是闰年
yibey 2011-11-15
  • 打赏
  • 举报
回复
哈哈你咋搞错了,一开始发现BUG是不是很兴奋啊,

结果往往我们质疑.NET的时候,最后发现错误的是我们自己
yespie 2011-11-15
  • 打赏
  • 举报
回复
不好意思,我搞错了

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧