C#深入淺出獲取時間DateTime

来源:https://www.cnblogs.com/dingshuanglei/archive/2019/03/07/10488727.html
-Advertisement-
Play Games

首先,先瞭解微軟.net裡面的DateTime的DateTime.Now、DateTime.Now.Date、DateTime.Now.Day、DateTime.Now.DayOfWeek、DateTime.Now.DayOfYear、DateTime.Now.Month //DateTime.No ...


首先,先瞭解微軟.net裡面的DateTime的DateTime.Now、DateTime.Now.Date、DateTime.Now.Day、DateTime.Now.DayOfWeek、DateTime.Now.DayOfYear、DateTime.Now.Month


 //DateTime.Now

// 摘要:
// 獲取一個 System.DateTime 對象,該對象設置為此電腦上的當前日期和時間,表示為本地時間。
//
// 返回結果:
// 其值為當前日期和時間的對象。


//DateTime.Now.Date
// 摘要:
// 獲取此實例的日期部分。
//
// 返回結果:
// 一個新對象,其日期與此實例相同,時間值設置為午夜 12:00:00 (00:00:00)。


 // DateTime.Now.Day

// 摘要:
// 獲取此實例所表示的日期為該月中的第幾天。
//
// 返回結果:
// 日組成部分,表示為 1 和 31 之間的一個值。


 // DateTime.Now.DayOfWeek

// 摘要:
// 獲取此實例所表示的日期是星期幾。
//
// 返回結果:
// 一個枚舉常量,指示此 System.DateTime 值是星期幾。


 // DateTime.Now.DayOfYear

// 摘要:
// 獲取此實例所表示的日期是該年中的第幾天。
//
// 返回結果:
// 該年中的第幾天,表示為 1 和 366 之間的一個值。


 // DateTime.Now.Month

// 摘要:
// 獲取此實例所表示日期的月份部分。
//
// 返回結果:
// 月組成部分,表示為 1 和 12 之間的一個值。

1. 今天0時0分0秒

DateTime.Now.Date;//2019/3/6 0:00:00

2.本周第1天和最後1天(時間值設置為午夜 12:00:00 (00:00:00))

//獲取今天是本周的周幾DateTime.Now.DayOfWeek

//DateTime.Now – DateTime.Now.DayOfWeek//周日

//DateTime.Now - (DateTime.Now.DayOfWeek+1)//周一

DateTime.Now.AddDays(-(int)DateTime.Now.DayOfWeek + 1).Date;//2019/3/4 0:00:00 周一 


 

//獲取今天是本周的周幾DateTime.Now.DayOfWeek

//本周剩餘天數:7 - (int)DateTime.Now.DayOfWeek

//DateTime.Now.AddDays(本周剩餘天數)//本周周末周日

DateTime.Now.AddDays(7 - (int)DateTime.Now.DayOfWeek).Date;//2019/3/10 0:00:00 周日

3.本月第1天和最後1天(時間值設置為午夜 12:00:00 (00:00:00))

//DateTime.Now.Day//今天是本月的第n天

//DateTime.Now.Day - 1//今天是本月的第n - 1天

//DateTime.Now - (DateTime.Now.Day - 1)//本月的第1天

DateTime.Now.AddDays(-DateTime.Now.Day + 1).Date;//本月的第1天 2019/3/1 00:00:00


 

//DateTime.Now.AddMonths(1);//下個月時間

//DateTime.Now.AddMonths(1).Day;//下個月的第n天

//DateTime.Now.AddMonths(1).Day - 1;//下個月的第n天-1

//DateTime.Now.AddMonths(1).AddDays(-DateTime.Now.AddMonths(1).Day + 1);//下個月的第1天

//DateTime.Now.AddMonths(1).AddDays(-DateTime.Now.AddMonths(1).Day + 1).AddDays(-1);//下個月的第1天-1天,就是本月最後1天

DateTime.Now.AddMonths(1).AddDays(-DateTime.Now.AddMonths(1).Day + 1).AddDays(-1).Date;//本月最後1天 2019/3/31 00:00:00

4.本季度第1天和最後1天(時間值設置為午夜 12:00:00 (00:00:00))

4.1本季度第1天求法思路

先來瞭解如何根據DateTime.Now獲取本季度的第1天,DateTime.Now.Month是本年的第m個月,如果直接使用m對季度單位3取餘,得到當前月份是本季度的第n個月;然後,使用DateTime.Now.AddMonths(-n)獲取本季度第1個月,需要考慮n為1(季度第1個)、2(季度第2個)、0(季度第3個)時,減去不同的數得到本季度的第1個月;如果,我們換一種方法,使用DateTime.Now.Month - 1得到本年的第x個月, x對季度單位3取餘為y,當y為0時為本季度的第1個月,y為1是本季度第2個月,y為2是本季度第3個月,這時使用DateTime.Now.Month - y得到的就是本季度的第1個月, 最後根據本季度的第1個月求得本季度的第1天。思路表述有點繞,如不理解可以手動模擬過程,代碼附上;

var sf1 =  DateTime.Now.Month - 1;//當前第m-1月

var sf2 = (DateTime.Now.Month - 1) % 3;//對季度取餘,本季度第n-1月

var sf = DateTime.Now.AddMonths(-((DateTime.Now.Month - 1) % 3));//本季度第1個月 2019/1/6 14:51:25

var sftime = sf.AddDays(-sf.Day + 1).Date;//本季度的第1天 2019/1/1 00:00:00

4.2本季度最後1天求法思路

本季度最後1天的求法,如果直接使用DateTime.Now.Month是本年的第m個月的m對季度單位3取餘,也會遇到求本季度第一天類似的問題,採用(DateTime.Now.Month - 1) % 3則不會有問題,然後求當前月+(3-(n-1)-1)個月,得到本季度最後一個月,最後求出本季度的最後1天;

 

var sl1 = DateTime.Now.Month - 1;//當前第m-1月

var sl2=(DateTime.Now.Month - 1) % 3;//對季度取餘,本季度第n-1月

var sl3= 3 - ((DateTime.Now.Month - 1) % 3) - 1;//當前月+(3-(n-1)-1)個月,得到本季度最後一個月

var sl = DateTime.Now.AddMonths((3 - ((DateTime.Now.Month - 1) % 3) - 1));//本季度的最後1個月 2019/3/6 14:52:25

var sltime= sl.AddMonths(1).AddDays(-sl.AddMonths(1).Day + 1).AddDays(-1).Date;//本季度的最後1天 2019/3/31 00:00:00

5.本年第1天和最後1天(時間值設置為午夜 12:00:00 (00:00:00))

5.1本年的第1天

var yf1 = DateTime.Now.DayOfYear;//今年的第n天

var yf2 = DateTime.Now.DayOfYear - 1;//今年的第n-1天

var yftime = DateTime.Now.AddDays(-DateTime.Now.DayOfYear + 1).Date;//今年的第1天 2019/1/1 00:00:00

5.2本年的最後1天

var yl1 = DateTime.Now.AddYears(1);//明年今天 2020/3/6 00:00:00

var yl2 = yl1.DayOfYear;//明年的今天在明年的第n天

var yl = yl1.AddDays(-yl1.DayOfYear).Date;//今年的最後1天 2019/12/31 00:00:00

作者水平有限如文中有錯誤或不恰當之處歡迎園友的前輩們給出寶貴的建議,本篇隨筆參考兩位園友的博客Keith_yuejin


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

-Advertisement-
Play Games
更多相關文章
  • 該隨筆簡單的展示了抽象類和抽象方法的定義和使用,使用繼承體現面向對象"多態"…… ...
  • base關鍵字的使用;protected關鍵字的使用;子類與父類的關係;子類如何調用父類構造方法? ...
  • 前言: IIS會預設把:圖片、JS、HTML、CSS這些文件當成靜態資源處理,為了減少伺服器壓力,預設這些靜態資源是不走URL路由規則控制的。 作為小白及初學者,本人對這些瞭解甚少,補充基礎知識吧: 由於業務需求,新建了一個空的WEB項目,但是需要把原項目中的一些功能Copy過來,如:自定義路由這塊 ...
  • asp.net core 將配置文件配置遷移到資料庫(一) Intro asp.net core 配置預設是項目根目錄下的 appsettings.json 文件,還有環境變數以及 command line arguments,有一些鏈接字元串等信息可能放在資料庫里更好一些,也方便修改與維護,有的配 ...
  • 類初始化在代碼中隨處可見,但是用靜態class和用實例class時應該遵循那些原則呢? 1、如果一個類定義成實例的,那麼這個類的全部成員儘量都定義成實例的 2、如果一個類是要共用一些成員,那麼所有成員都定義成靜態的,類本身也定義成靜態的 有些時候我們可能會實例成員和靜態成員混合定義,但是不建議這樣做 ...
  • <?xml version="1.0"?> <ColumnsSeting xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Columns> <Co ...
  • 兩個對象是否為同一個對象:是看兩個對象是否指向堆中的同一塊記憶體。 1、使用object.ReferenceEquals() 2.使用object.equals() 3、使用== 得到同樣的結果。 目前來看,這三個方法都能判斷兩個對象是否為同一個對象。但是: 這兩個s1,s2是兩個不同的對象,因為ne ...
  • 之前寫了一個桌面程式,程式會間歇性訪問某個https介面,一直用的好好的,今天突然報錯了,異常就發生在訪問介面的地方,曰“請求被中止,未能創建 SSL/TLS 安全通道。”,另外有臺電腦也有跑該程式,也是同樣的報錯,看來是介面方改動過什麼了。 搜索一番,原因應該是,介面方變更了安全協議,而客戶端並未 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...