项目中经常会用到一些时间工具类,虽然C#中DateTime时间类里已经封装了许多时间算法,但也并不是面面俱到,有些需求还是需要对时间类进行扩展使用,这里分享几个项目中使用的时间工具类的算法,欢迎各位前来的道友给予补充和批评噢~

  • 获取旬天数

每个月分为上旬、中旬、下旬,每个月的上旬、中旬天数都是固定的,为10天,但是下旬的天数是不固定的。有两种情况,一种情况是平年的时候,下旬可能为8天、10天、11天,另一种情况是闰年的时候,下旬可能为9天、10天、11天。在C#中处理这个问题的话,就利用时间类的DaysInMonth方法(该方法的需要的参数为年和月)获取到当月天数,然后减去上旬和中旬的天数即为下旬的天数。代码实现如下:


  1. /// 获取旬的天数

  2. /// 日期


  3. public static int

  4. GetXunDays(DateTime dt)

    1. return dt.Day <= 10 ? 10 : (dt.Day <= 20 ? 10 : DateTime.DaysInMonth(dt.Year,dt.Month) - 20);


  • 获取季天数

每年会有四季,每季三个月,除2月份会因为受到平年、闰年影响(平年2月份有28天,闰年有29天),其余三季的天数是固定的,记住一句口诀:一三五七八十腊都是31天,除2月以外的天数都是30天。因此我们获取季天数的代码实现为:


  1. /// 获取季的天数

  2. ///

  3. ///

  4. ///

  5. public static int

  6. GetSeasonDays(DateTime dt)

  7. {

    1. switch (dt.Month)

    2. {

    3. //春季

    4. case 1:

    5. return 31 +

    6. DateTime.DaysInMonth

    7. (dt.Year,dt.AddMonths(1)

    8. .Month) + 31;

    9. case 2:

    10. return

    11. DateTime.DaysInMonth

    12. (dt.Year,dt.Month)

    13. + DateTime.

    14. DaysInMonth

    15. (dt.Year,

    16. dt.AddMonths(-1).

    17. Month)

    18. + 31;

    19. case 3:

    20. return 31 +

    21. DateTime.

    22. DaysInMonth

    23. (dt.Year,

    24. dt.AddMonths(-1).

    25. Month)

    26. + 31;

    27. //夏季

    28. case 4:

    29. case 5:

    30. case 6:

    31. return 30 + 31 + 30;

    32. //秋季

    33. case 7:

    34. case 8:

    35. case 9:

    36. return 31 + 31 + 30;

    37. case 10:

    38. case 11:

    39. case 12:

    40. return 31 + 30 + 31;

    41. }

    42. return -1;


    43. }

      }

当然这块的代码并不是写的很好,如果进来的朋友有更好的思路可以在下方留言讨论哦~

  • 获取年天数

C# 作为一门高级的编程语言,其时间类DateTime提供了很多的工具类算法,我们无需写if-else判断当年是否为闰年,使用IsLeapYear方法可以判断当前年是否为闰年,于是我们获取当年的天数就会变得非常简单,实现代码如下:


  1. /// 获取年天

  2. /// 日期


  3. public static int

  4. GetYearDays(DateTime dt)

    1. return DateTime.IsLeapYear(dt.Year) ? 366 : 365;

这三个时间工具算法是项目中目前使用的,也不知道能不能帮助到进来的朋友们,以后有扩展的方法我还会第一时间写出来,这次先分享到这里啦,也欢迎大家在下方提需求和思路哦!

微信搜索关注公众号:技术上的那些事,程序猿浩浩想和你们一起讨论编程路上的遇到的坑和新奇想法~