C# DateTime 工具類

来源:https://www.cnblogs.com/xiaotimor/archive/2020/02/18/12326820.html
-Advertisement-
Play Games

項目gitHub地址 點我跳轉 今天給大家帶來一個C#裡面的時間工具類,具體的直接看下麵代碼 1 using System; 2 3 namespace ToolBox.DateTimeTool 4 { 5 public static class DateTimeExtend 6 { 7 /// < ...


項目gitHub地址 點我跳轉

今天給大家帶來一個C#裡面的時間工具類,具體的直接看下麵代碼

  1 using System;
  2 
  3 namespace ToolBox.DateTimeTool
  4 {
  5     public static class DateTimeExtend
  6     {
  7         /// <summary>
  8         /// 獲取本日開始時間(0點0分0秒)
  9         /// </summary>
 10         /// <param name="dateTime"></param>
 11         /// <returns></returns>
 12         public static DateTime GetDayStart(this DateTime dateTime)
 13         {
 14             return dateTime.Date;
 15         }
 16 
 17         /// <summary>
 18         /// 獲取本日結束時間(23點59分59秒)
 19         /// </summary>
 20         /// <param name="dateTime"></param>
 21         /// <returns></returns>
 22         public static DateTime GetDayEnd(this DateTime dateTime)
 23         {
 24             return dateTime.Date.AddDays(1).AddMilliseconds(-1);
 25         }
 26 
 27         /// <summary>
 28         /// 獲取本周開始時間
 29         /// </summary>
 30         /// <param name="dateTime"></param>
 31         /// <returns></returns>
 32         public static DateTime GetWeekStart(this DateTime dateTime)
 33         {
 34             return dateTime.AddDays(-(int)dateTime.DayOfWeek + 1).GetDayStart();
 35         }
 36 
 37         /// <summary>
 38         /// 獲取本周結束時間
 39         /// </summary>
 40         /// <param name="dateTime"></param>
 41         /// <returns></returns>
 42         public static DateTime GetWeekEnd(this DateTime dateTime)
 43         {
 44             return dateTime.AddDays(7 - (int)dateTime.DayOfWeek).GetDayEnd();
 45         }
 46 
 47         /// <summary>
 48         /// 獲取本月開始時間
 49         /// </summary>
 50         /// <param name="dateTime"></param>
 51         /// <returns></returns>
 52         public static DateTime GetMonthStart(this DateTime dateTime)
 53         {
 54             return new DateTime(dateTime.Year, dateTime.Month, 1, 0, 0, 0, 0);
 55         }
 56 
 57         /// <summary>
 58         /// 獲取本月結束時間
 59         /// </summary>
 60         /// <param name="dateTime"></param>
 61         /// <returns></returns>
 62         public static DateTime GetMonthEnd(this DateTime dateTime)
 63         {
 64             return GetMonthStart(dateTime).AddMonths(1).AddMilliseconds(-1);
 65         }
 66 
 67         /// <summary>
 68         /// 獲取本季度開始時間
 69         /// </summary>
 70         /// <param name="dateTime"></param>
 71         /// <returns></returns>
 72         public static DateTime GetSeasonStart(this DateTime dateTime)
 73         {
 74             var time = dateTime.AddMonths(0 - ((dateTime.Month - 1) % 3));
 75             return DateTime.Parse(time.AddDays(-time.Day + 1).ToString("yyyy/MM/dd 00:00:00"));
 76         }
 77 
 78         /// <summary>
 79         /// 獲取本季度結束時間
 80         /// </summary>
 81         /// <param name="dateTime"></param>
 82         /// <returns></returns>
 83         public static DateTime GetSeasonEnd(this DateTime dateTime)
 84         {
 85             var time = dateTime.AddMonths((3 - ((dateTime.Month - 1) % 3) - 1));
 86             return DateTime.Parse(time.AddMonths(1).AddDays(-time.AddMonths(1).Day + 1).AddDays(-1).ToString("yyyy/MM/dd 23:59:59"));
 87         }
 88 
 89         /// <summary>
 90         /// 獲取本年開始時間
 91         /// </summary>
 92         /// <param name="dateTime"></param>
 93         /// <returns></returns>
 94         public static DateTime GetYearStart(this DateTime dateTime)
 95         {
 96             return DateTime.Parse(dateTime.AddDays(-dateTime.DayOfYear + 1).ToString("yyyy/MM/dd 00:00:00"));
 97         }
 98 
 99         /// <summary>
100         /// 獲取本年結束時間
101         /// </summary>
102         /// <param name="dateTime"></param>
103         /// <returns></returns>
104         public static DateTime GetYearEnd(this DateTime dateTime)
105         {
106             var time2 = dateTime.AddYears(1);
107             return DateTime.Parse(time2.AddDays(-time2.DayOfYear).ToString("yyyy/MM/dd 23:59:59"));
108         }
109 
110         /// <summary>
111         /// 北京時間轉換成unix時間戳(10位/秒)
112         /// </summary>
113         /// <param name="dateTime"></param>
114         /// <returns></returns>
115         public static long BeijingTimeToUnixTimeStamp10(this DateTime dateTime)
116         {
117             return (long)(dateTime - new DateTime(1970, 1, 1, 8, 0, 0)).TotalSeconds;
118         }
119 
120         /// <summary>
121         /// 格林威治時間轉換成unix時間戳(10位/秒)
122         /// </summary>
123         /// <param name="dateTime"></param>
124         /// <returns></returns>
125         public static long UtcTimeToUnixTimeStamp10(this DateTime dateTime)
126         {
127             return (long)(dateTime - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds;
128         }
129 
130         /// <summary>
131         /// 北京時間轉換成unix時間戳(13位/毫秒)
132         /// </summary>
133         /// <param name="dateTime"></param>
134         /// <returns></returns>
135         public static long BeijingTimeToUnixTimeStamp13(this DateTime dateTime)
136         {
137             return (long)(dateTime - new DateTime(1970, 1, 1, 8, 0, 0)).TotalMilliseconds;
138         }
139 
140         /// <summary>
141         /// 格林威治時間轉換成unix時間戳(13位/毫秒)
142         /// </summary>
143         /// <param name="dateTime"></param>
144         /// <returns></returns>
145         public static long UtcTimeToUnixTimeStamp13(this DateTime dateTime)
146         {
147             return (long)(dateTime - new DateTime(1970, 1, 1, 0, 0, 0)).TotalMilliseconds;
148         }
149 
150         /// <summary>
151         /// 10位unix時間戳轉換成北京時間
152         /// </summary>
153         /// <param name="dateTime"></param>
154         /// <returns></returns>
155         public static DateTime UnixTimeStamp10ToBeijingTime(this long unixTimeStamp)
156         {
157             return new DateTime(1970, 1, 1, 8, 0, 0).AddSeconds(unixTimeStamp);
158         }
159 
160         /// <summary>
161         /// 10位unix時間戳轉換成格林威治
162         /// </summary>
163         /// <param name="dateTime"></param>
164         /// <returns></returns>
165         public static DateTime UnixTimeStamp10ToUtcTime(this long unixTimeStamp)
166         {
167             return new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(unixTimeStamp);
168         }
169 
170         /// <summary>
171         /// 13位unix時間戳轉換成北京時間
172         /// </summary>
173         /// <param name="dateTime"></param>
174         /// <returns></returns>
175         public static DateTime UnixTimeStamp13ToBeijingTime(this long unixTimeStamp)
176         {
177             return new DateTime(1970, 1, 1, 8, 0, 0).AddMilliseconds(unixTimeStamp);
178         }
179 
180         /// <summary>
181         /// 13位unix時間戳轉換成格林威治
182         /// </summary>
183         /// <param name="dateTime"></param>
184         /// <returns></returns>
185         public static DateTime UnixTimeStamp13ToUtcTime(this long unixTimeStamp)
186         {
187             return new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(unixTimeStamp);
188         }
189 
190         /// <summary>
191         /// 當前日期所在月份第一個指定星期幾的日期
192         /// </summary>
193         /// <param name="date">給定日期</param>
194         /// <param name="dayOfWeek">星期幾</param>
195         /// <returns>所對應的日期</returns>
196         public static DateTime GetFirstWeekDayOfMonth(this DateTime date, DayOfWeek dayOfWeek)
197         {
198             var dt = date.GetMonthStart();
199             while (dt.DayOfWeek != dayOfWeek)
200                 dt = dt.AddDays(1);
201 
202             return dt;
203         }
204 
205         /// <summary>
206         /// 當前日期所在月份最後1個指定星期幾的日期
207         /// </summary>
208         /// <param name="date">給定日期</param>
209         /// <param name="dayOfWeek">星期幾</param>
210         /// <returns>所對應的日期</returns>
211         public static DateTime GetLastWeekDayOfMonth(this DateTime date, DayOfWeek dayOfWeek)
212         {
213             var dt = date.GetMonthEnd();
214             while (dt.DayOfWeek != dayOfWeek)
215                 dt = dt.AddDays(-1);
216 
217             return dt;
218         }
219 
220         /// <summary>
221         /// 判斷是否比指定之間早
222         /// </summary>
223         /// <param name="date"></param>
224         /// <param name="other"></param>
225         /// <returns></returns>
226         public static bool IsBefore(this DateTime date, DateTime other)
227         {
228             return date < other;
229         }
230 
231         /// <summary>
232         /// 判斷是否比指定時間晚
233         /// </summary>
234         /// <param name="date"></param>
235         /// <param name="other"></param>
236         /// <returns></returns>
237         public static bool IsAfter(this DateTime date, DateTime other)
238         {
239             return date > other;
240         }
241 
242         /// <summary>
243         /// 給定日期所在月份共有多少天
244         /// </summary>
245         /// <param name="date"></param>
246         /// <returns></returns>
247         public static int GetCountDaysOfMonth(this DateTime date)
248         {
249             return date.GetMonthEnd().Day;
250         }
251 
252         /// <summary>
253         /// 當前日期與給定日期是否是同一天
254         /// </summary>
255         /// <param name="date">當前日期</param>
256         /// <param name="dateToCompare">給定日期</param>
257         /// <returns></returns>
258         public static bool IsDateEqual(this DateTime date, DateTime dateToCompare)
259         {
260             return date.Date == dateToCompare.Date;
261         }
262 
263         /// <summary>
264         /// 是否是周未
265         /// </summary>
266         /// <param name="date"></param>
267         /// <returns></returns>
268         public static bool IsWeekend(this DateTime date)
269         {
270             return date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday;
271         }
272 
273         /// <summary>
274         /// 是否是工作日
275         /// </summary>
276         /// <param name="date"></param>
277         /// <returns></returns>
278         public static bool IsWeekDay(this DateTime date)
279         {
280             return !date.IsWeekend();
281         }
282 
283         /// <summary>
284         /// 判斷是否為今天
285         /// </summary>
286         /// <param name="date"></param>
287         /// <returns></returns>
288         public static bool IsToday(this DateTime date)
289         {
290             return date.Date == DateTime.Now.Date;
291         }
292 
293         /// <summary>
294         /// 判定西曆閏年遵循的一般規律為:四年一閏,百年不閏,四百年再閏。
295         /// 西曆閏年的精確計算方法:(按一回歸年365天5小時48分45.5秒)
296         /// 普通年能被4整除而不能被100整除的為閏年。 (如2004年就是閏年,1900年不是閏年)
297         /// 世紀年能被400整除而不能被3200整除的為閏年。 (如2000年是閏年,3200年不是閏年)
298         /// 對於數值很大的年份能整除3200,但同時又能整除172800則又是閏年。(如172800年是閏年,86400年不是閏年)
299         /// 公元前閏年規則如下:
300         /// 非整百年:年數除4餘數為1是閏年,即公元前1、5、9……年;
301         /// 整百年:年數除400餘數為1是閏年,年數除3200餘數為1,不是閏年,年數除172800餘1又為閏年,即公元前401、801……年。
302         /// </summary>
303         /// <param name="dateTime"></param>
304         /// <returns></returns>
305         public static bool IsLeap(this DateTime dateTime)
306         {
307             var year = dateTime.Year;
308             if ((year % 400 == 0 && year % 3200 != 0)
309                || (year % 4 == 0 && year % 100 != 0)
310                || (year % 3200 == 0 && year % 172800 == 0))
311                 return true;
312             else
313                 return false;
314         }
315 
316         /// <summary>
317         /// 獲取當前年天數
318         /// </summary>
319         /// <param name="dateTime"></param>
320         /// <returns></returns>
321         public static int GetDaysByYear(this DateTime dateTime)
322         {
323             return (new DateTime(dateTime.Year + 1, 1, 1) - new DateTime(dateTime.Year, 1, 1)).Days;
324         }
325 
326         /// <summary>
327         /// 獲取當前年天數
328         /// </summary>
329         /// <param name="dateTime"></param>
330         /// <returns></returns>
331         public static int GetWeekCountByYear(this DateTime dateTime)
332         {
333             //找到今年的第一天是周幾
334             int firstWeekend = Convert.ToInt32(DateTime.Parse(dateTime.Year + "-1-1").DayOfWeek);
335 
336             //獲取第一周的差額,如果是周日,則firstWeekend為0,第一周也就是從周天開始的。
337             int weekDay = firstWeekend == 0 ? 1 : (7 - firstWeekend + 1);
338 
339             //獲取今天是一年當中的第幾天
340             int currentDay = dateTime.DayOfYear;
341 
342             //(今天 減去 第一周周末)/7 等於 距第一周有多少周 再加上第一周的1 就是今天是今年的第幾周了
343             //    剛好考慮了惟一的特殊情況就是,今天剛好在第一周內,那麼距第一周就是0 再加上第一周的1 最後還是1
344             int current_week = Convert.ToInt32(Math.Ceiling((currentDay - weekDay) / 7.0)) + 1;
345             return current_week;
346         }
347 
348     }
349 }

這個時間工具類是自己通過各種途徑彙總的常用方法,需要的朋友可以自行拿走,有其他新的需求可以在評論下麵告訴我,一起完善,謝謝

另外需要使用的朋友可以直接在Nuget 搜索  ToolBox.DateTimeTool 安裝使用即可 支持NET Framework 以及Net core 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • springboot預設打包成jar,如果想打包成war,則需要做以下三步。 1.修改pom.xml文件 a.將jar改成war 1 <groupId>com.test</groupId> 2 <artifactId>01-springboot-HelloWorld</artifactId> 3 < ...
  • 下載cron包: go get github.com/robfig/cron 開啟一個定時: 根據cron表達式進行時間調度,cron可以精確到秒,大部分表達式格式也是從秒開始。 c := cron.New()預設從分開始,所以加上cron.WithSeconds(),保證定時按照表達式字面意思執行 ...
  • 1.工具類可以一次寫入多方多方調用,很大程度的節約開發時間得到想要的信息 這裡演示一個json介面的工具類(文件定義在App\Http\Controllers\Tools)中 <?php /** * Created by PhpStorm. * User: yly * Date: 2020/2/18 ...
  • 最近由於“武漢肺炎”疫情在家辦公,也沒閑著,最近學習了一下asp.net core mvc的一些網頁開發的的基礎知識,話不多說直接上教程! 一、創建Web應用程式 1)創建新項目 >找到 “ASP.NET Core Web 應用程式” 類型的項目(也可以模糊查詢:語言選擇c#,項目類型選擇Web): ...
  • 概述 ASP.NET Core可以說是處處皆註入,本文從基礎角度理解一下原生DI容器,及介紹下怎麼使用並且如何替換官方提供的預設依賴註入容器。 什麼是依賴註入 百度百科中對於依賴註入的定義: 控制反轉 (Inversion of Control,縮寫為 IoC ),是 "面向對象編程" 中的一種設計 ...
  • 在 C 中存在一個名叫靜態類型檢查的機制,這個機制可以讓編譯器幫助我們把類型不服的用法找出來,從而使得應用程式在運行期間加少一些類型檢查的操作。但是有時候我們還是需要進行運行期類型檢查,比如我們在設計框架時將方法的參數類型定義為 object ,那麼這時我們就有很大的可能需要將 object 類型的 ...
  • 本筆記摘抄自:https://www.cnblogs.com/PatrickLiu/p/7772184.html,記錄一下學習過程以備後續查用。 一、引言 今天我們要講結構型設計模式的第五個模式--外觀模式。先從名字上來理解一下外觀模式,當看到“外觀”這個詞時,很容易想到“外表”這個詞語,兩者有著 ...
  • 《C# 6.0 本質論》 [作者] (美) Mark Michaelis (美) Eric Lippert[譯者] (中) 周靖 龐燕[出版] 人民郵電出版社[版次] 2017年02月 第5版[印次] 2017年02月 第1次 印刷[定價] 108.00元 【前言】 成功學習 C# 的關鍵在於,要盡 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...