首先,先瞭解微軟.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