.NET DateTime 源码学习

发表于:2017-10-12 11:44

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:阿祖哥    来源:51Testing软件测试网采编

#
DotNet
分享:
  今天下载了微软.Net源码,看了一下DateTime类,做下记录
  DaysInMonth这个方法是获取某年某月的天数,平时直接用觉得很简单,今天看到源码,发现设计的还是很好的
  我想如果是我的话,封装这个方法应该会根据每个月固定天数,直接一个switch就完了;
  但是看看微软是怎么做的
  publicstaticintDaysInMonth(intyear,intmonth){
  if(month<1||month>12)
  thrownewArgumentOutOfRangeException("month",Environment.GetResourceString("ArgumentOutOfRange_Month"));
  Contract.EndContractBlock();
  //IsLeapYearcheckstheyearargument
  int[]days=IsLeapYear(year)?DaysToMonth366:DaysToMonth365;
  returndays[month]-days[month-1];
  }
  1:参数错误,抛出异常;
  2:判断是否是闰年,闰年的话用闰年的方式计算,反之用平年;
  3:有趣的是DaysToMonth366和DaysToMonth365,这两个变量是什么呢?
  privatestaticreadonlyint[]DaysToMonth365={
  0,31,59,90,120,151,181,212,243,273,304,334,365};
  privatestaticreadonlyint[]DaysToMonth366={
  0,31,60,91,121,152,182,213,244,274,305,335,366};
  可以看到,DaysToMonth366是闰年从第一个月到当前月的天数之和,DaysToMonth365是平年从第一个月到当前月的天数之和
  为什么要这样设计呢?我开始也不明白,后来想明白了
  如果仅仅是针对DaysInMonth这个方法这样设计是大材小用,完全可以把每个月的天数单独放进数组里,而不用存天数之和这种方式,之所以这样做,是因为还有很多其他方法会频繁的用到天数之和之类的操作,比如从3月到5月多少天,就很方便取得结果,而单独一个月的天数也可用使用相减的操作来方便获得;
  不过对于强迫症来说,DaysToMonth366和DaysToMonth365这两个数组中只有2月的天数不一样,其他其实都一样,真的很想再抽象一层啊。。。。

精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号