以前只有寫判斷銀行營業、關帳日、計息起息結息日的,趁中午吃點心來補同事們需要的函數(判斷月初、月底、季初、季底、年初、年底)。
直接用擴充方法(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元。