C#DateTime類擴充套件——獲取旬、季、年天數方法
專案中經常會用到一些時間工具類,雖然C#中DateTime時間類裡已經封裝了許多時間演算法,但也並不是面面俱到,有些需求還是需要對時間類進行擴充套件使用,這裡分享幾個專案中使用的時間工具類的演算法,歡迎各位前來的道友給予補充和批評噢~
- 獲取旬天數
每個月分為上旬、中旬、下旬,每個月的上旬、中旬天數都是固定的,為10天,但是下旬的天數是不固定的。有兩種情況,一種情況是平年的時候,下旬可能為8天、10天、11天,另一種情況是閏年的時候,下旬可能為9天、10天、11天。在C#中處理這個問題的話,就利用時間類的DaysInMonth方法(該方法的需要的引數為年和月)獲取到當月天數,然後減去上旬和中旬的天數即為下旬的天數。程式碼實現如下:
/// <summary>
/// 獲取旬的天數
/// </summary>
/// <param name="dt">日期</param>
/// <returns></returns>
public static int GetXunDays(DateTime dt)
{
return dt.Day <= 10 ? 10 : (dt.Day <= 20 ? 10 : DateTime.DaysInMonth(dt.Year,dt.Month) - 20);
}
- 獲取季天數
每年會有四季,每季三個月,除2月份會因為受到平年、閏年影響(平年2月份有28天,閏年有29天),其餘三季的天數是固定的,記住一句口訣:一三五七八十臘都是31天,除2月意外以外的天數都是30天。因此我們獲取季天數的程式碼實現為:
/// <summary>
/// 獲取季的天數
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static int GetSeasonDays(DateTime dt)
{
switch (dt.Month)
{
//春季
case 1:
return 31 + DateTime.DaysInMonth(dt.Year,dt.AddMonths(1).Month) + 31;
case 2:
return DateTime.DaysInMonth(dt.Year,dt.Month) + DateTime.DaysInMonth(dt.Year, dt.AddMonths(-1).Month) + 31;
case 3:
return 31 + DateTime.DaysInMonth(dt.Year, dt.AddMonths(-1).Month) + 31;
//夏季
case 4:
case 5:
case 6:
return 30 + 31 + 30;
//秋季
case 7:
case 8:
case 9:
return 31 + 31 + 30;
case 10:
case 11:
case 12:
return 31 + 30 + 31;
}
return -1;
}
當然這塊的程式碼並不是寫的很好,如果進來的朋友有更好的思路可以在下方留言討論哦~
- 獲取年天數
C# 作為一門高階的程式語言,其時間類DateTime提供了很多的工具類演算法,我們無需寫if-else判斷當年是否為閏年,使用IsLeapYear方法可以判斷當前年是否為閏年,於是我們獲取當年的天數就會變得非常簡單,實現程式碼如下:
/// <summary>
/// 獲取年天
/// </summary>
/// <param name="dt">日期</param>
/// <returns></returns>
public static int GetYearDays(DateTime dt)
{
return DateTime.IsLeapYear(dt.Year) ? 366 : 365;
}
這三個時間工具演算法是專案中目前使用的,也不知道能不能幫助到進來的朋友們,以後有擴充套件的方法我還會第一時間寫出來,這次先分享到這裡啦,也歡迎大家在下方提需求和思路哦!
微信搜尋關注公眾號:技術上的那些事,程式猿浩浩想和你們一起討論程式設計路上的遇到的坑和新奇想法~
相關文章
- 網頁重寫字串val()方法的擴充套件獲取安全引數String網頁字串套件
- 開源 - Ideal庫 -獲取特殊時間擴充套件方法(四)Idea套件
- 分類擴充套件套件
- HttpContext擴充套件類HTTPContext套件
- Spring(11) - Introductions進行類擴充套件方法Spring套件
- JMeter 擴充套件開發:擴充套件 TCP 取樣器JMeter套件TCP
- Json擴充套件方法JSON套件
- LINQ擴充套件方法套件
- Laravel 呼叫其他路由 獲取返回資料擴充套件Laravel路由套件
- android view 擴充套件方法AndroidView套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- C#學習筆記-方法引數、擴充套件方法C#筆記套件
- 再學Blazor——擴充套件方法Blazor套件
- weex ios擴充套件類的作用iOS套件
- Java-IoUtil擴充套件工具類Java套件
- 擴充套件叢集blk數套件
- 數論分塊擴充套件套件
- (精華)2020年6月26日 C#類庫 Enum(擴充套件方法)C#套件
- (精華)2020年6月26日 C#類庫 DataTable(擴充套件方法)C#套件
- AbpVnext使用分散式IDistributedCache Redis快取(自定義擴充套件方法)分散式Redis快取套件
- go get 拉取擴充套件報錯Go套件
- SpringBoot各類擴充套件點詳解Spring Boot套件
- 五個檢視擴充套件類 LL套件
- PowerToys外掛擴充套件(類似Alfred)套件Alfred
- dart系列之:dart類的擴充套件Dart套件
- Java 缺失的特性:擴充套件方法Java套件
- tonyenc加密擴充套件使用方法加密套件
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- T-SQL——透視PIVOT動態獲取待擴充套件元素集SQL套件
- es6-數值擴充套件套件
- iOS開發的分類和擴充套件iOS套件
- C#中的擴充套件類的理解C#套件
- 轉向Kotlin——列舉類和擴充套件Kotlin套件
- ES6 -- String 擴充套件方法解析套件
- es6 陣列擴充套件方法陣列套件
- Flutter——Dart Extension擴充套件方法的使用FlutterDart套件
- 第200天:js---常用string原型擴充套件JS原型套件
- 數值的擴充套件方法以及新增資料型別BigInt套件資料型別