[.NET][C#]判斷日期是否為月初、月底、季初、季底、年初、年底的日期函數(extension methods)

以前只有寫判斷銀行營業、關帳日、計息起息結息日的,趁中午吃點心來補同事們需要的函數(判斷月初、月底、季初、季底、年初、年底)。

 

直接用擴充方法(extension methods)寫,攻城獅使用DateTime型別的變數時就可以直接使用。

 


DateTimeExtensions

把類別放在專案內Extensions資料夾

public static class DateTimeExtensions
{
    //每月第一天
    public static Boolean isMonthStart(this DateTime date)
   {
        if (date.Day == 1)
        {
            return true;
        }
        return false;
   }
    //每月最後一天
    public static Boolean isMonthEnd(this DateTime date)
    {
        if (date.AddDays(1).Day == 1)
        {
            return true;
        }
        return false;
    }
    //每年的第一天
    public static Boolean isYearStart(this DateTime date)
   {
        if (date.DayOfYear == 1)
        {
            return true;
        }
        return false;
    }
    //每年最後一天
    public static Boolean isYearEnd(this DateTime date)
    {
        if (date.Month == 12 && date.isMonthEnd())
        {
            return true;
        }
        return false;
    }
    //每一季的第一天
    public static Boolean isQuarterStart(this DateTime date)
    {
        List<int> Quarters = new List<int> { 1, 4, 7, 10 };
        if (Quarters.Contains(date.Month) && date.Day == 1)
        {
            return true;
        }
        return false;
    }
    //每一季的最後一天
    public static Boolean isQuarterEnd(this DateTime date)
    {
        List<int> Quarters = new List<int> { 3, 6, 9, 12 };
        if (Quarters.Contains(date.Month) && date.isMonthEnd())
        {
            return true;
        }
        return false;
    }
}

 

我們就從2017/12/30開始測試,往前看1001天,揮別困在專案裡的2017這1年。

[TestMethod]
public void TestMethod1()
{
    DateTime dtstart = new DateTime(2017, 12, 30);
   for (int i = 0; i < 1001; i++)
    {
        DateTime dt = dtstart.AddDays(i);
        if (dt.isYearStart() || dt.isYearEnd() || dt.isQuarterStart() || dt.isQuarterEnd() || dt.isMonthStart() || dt.isMonthEnd())
       {
           Console.WriteLine($"{dt.ToShortDateString()}: " +
           $"月初:{dt.isMonthStart().ToString().Replace("False", "")} " +
           $"月底{dt.isMonthEnd().ToString().Replace("False", "")} " +
           $"年初:{dt.isYearStart().ToString().Replace("False", "")} " +
           $"年底{dt.isYearEnd().ToString().Replace("False", "")} " +
           $"季初:{dt.isQuarterStart().ToString().Replace("False", "")} " +
           $"季底{dt.isQuarterEnd().ToString().Replace("False", "")}");
        }
    }
}

預期結果可以讓大家自己填,再加到測試方法。

 

測試結果: 

 

寫完,繼續吃午餐,晴光街紅豆餅,今天買到老婆要的蘿蔔絲,然後漲價了,1個12元。