首先,先了解微软.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

C#深入浅出获取时间DateTime的更多相关文章

  1. 工作的时候 用到了 获取时间 DateTime 整理了一下

    获得当前系统时间: DateTime dt = DateTime.Now; Environment.TickCount可以得到“系统启动到现在”的毫秒值 DateTime now = DateTime ...

  2. C#:获取时间年月日时分秒格式

    //获取日期+时间 DateTime.Now.ToString();            // 2008-9-4 20:02:10 DateTime.Now.ToLocalTime().ToStri ...

  3. C#获取时间的函数

    //获取日期+时间DateTime.Now.ToString();            // 2012-9-4 20:02:10DateTime.Now.ToLocalTime().ToString ...

  4. c#.net 获取时间日期年月日时分秒格式

    今天写代码发现两个比较不错的分享下:1.DateTime.ParseExact很多时候我们获取的时间是数字形式表示的,好比20140127134015.927856,通过这个方法DateTime.Pa ...

  5. c#.net 获取时间日期年月日时分秒生成自动文件名格式

    下面是日期和时间的各种方法,转换为字符串. 如果把输出的格式改下就可以做类似的文件名了,例如:2016010110101224356.doc  c#用DateTime.Now.ToString(&qu ...

  6. asp.net获取时间日期插入数据库

    //获取日期+时间 DateTime.Now.ToString(); // 2008-9-4 20:02:10 DateTime.Now.ToLocalTime().ToString(); // 20 ...

  7. Python 调用datetime或者time获取时间的时候以及时间转换,最好设置一下时区 否则会出现相差8个小时的情况

    在使用调用datetime或者time获取时间的时候以及时间转换,最好设置一下时区, 因为不同机器设置的时区不同,获取的时间可能就不对,正好我们使用的这两个服务器使用的都是东八区,所以没有问题,设置方 ...

  8. C# DateTime 获取时间方法,网上收集

    DateTime dt = DateTime.Now; //当前时间 DateTime startWeek = dt.AddDays( - Convert.ToInt32(dt.DayOfWeek.T ...

  9. POCO库——Foundation组件之日期时间DateTime

    日期时间DateTime:内部提供多个设计计时器.日期.时区.时间戳等: Clock.h :Clock时钟计时类,_clock:Int64类型时钟值,CLOCKVAL_MIN.CLOCKVAL_MAX ...

随机推荐

  1. N皇后问题12 · N-Queens

    [抄题]: n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击. 给定一个整数n,返回所有不同的n皇后问题的解决方案. 每个解决方案包含一个明确的n皇后放置布局,其中“Q”和“.”分 ...

  2. 【转】从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler

    原文:http://www.cnblogs.com/jeffwongishandsome/archive/2012/01/08/2316521.html 熟悉WebForm开发的朋友一定都知道,Pag ...

  3. 【笔记】C#往TextBox的方法AppendText加入的内容里插入换行符

    C# TextBox换行[huan hang]时你往往会想到直接付给一个含有换行[huan hang]符"\n"的字符[zi fu]串[zi fu chuan]给Text属性[sh ...

  4. 获取url路径中的参数

    简介 运用js的时候,我们有时可能会有这样的需求,就是想要获取浏览器地址栏指定的一项参数,形如:https://i.cnblogs.com/EditPosts.aspx?postid=8628413& ...

  5. Boolean.getBoolean用法

    相信很多人被Boolean.getBoolean(String name)欺骗过,想当然的认为它是将"true"或者"false"转换为Boolean类型的AP ...

  6. 02 请求库之 requests模块

    requests模块   一 介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:requ ...

  7. 老板说你的UI设计的不高级?你肯定没用这7个技巧...

    对于每个网页设计师而言,在设计过程中总会碰到需要作出设计决策的时候.也许你的公司并没有全职设计师,而需求上则要求设计出全新的UI:又或者你正在制作一个你自己的个人项目,而你希望它比 Bootstrap ...

  8. Jmeter从一个Reply Message中获取N个参数的值,然后根据这个参数对后面的操作循环N次(ForEach Controller的用法)

    假设Reply Message是这样的: <root><result code="0" msg="success" /><m k= ...

  9. 关于某一discuz 6.0论坛故障的记录

    某日,额突然发现公司的discuz 6.0论坛在IE6浏览器下面显示出现问题: 每个链接都出现了下划线,很难看,不过已访问的链接(a:visted)却没有下划线,于是怀疑css.htm有问题.于是对c ...

  10. 【JAVA】通过URLConnection/HttpURLConnection发送HTTP请求的方法(一)

    Java原生的API可用于发送HTTP请求 即java.net.URL.java.net.URLConnection,JDK自带的类: 1.通过统一资源定位器(java.net.URL)获取连接器(j ...