博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#时间的味道——任时光匆匆我只在乎你
阅读量:5134 次
发布时间:2019-06-13

本文共 11674 字,大约阅读时间需要 38 分钟。

如果没有遇见你,我将会是在哪里?日子过的怎么样人生是否要珍惜...任时光匆匆我只在乎你,心甘情愿感染你的气息,人生几何能得到知己...一首邓丽君的《我只在乎你》不禁令我唏嘘不已,这些年离我们而去的还有哥哥张国荣,我们忘不了他那忧郁的眼神,偶尔也会怀念家驹,每当心里难过的时候,那首《海阔天空》总能让我找到活着的意义,当然了还有乔布斯,他比我们更了解时间的意义,时间是一把无情刻刀,改变了我们的模样,也改变了这个世界,听着这些歌,我们的思绪仿佛回到了过去,回到了童年,怀念一些人和一些事,这就是时间存在的意义。

即便在程序的世界里也依然如此,因为时间从没有离开过我们,我们总能品尝到时间的味道,这不在C#里就有一个主管时间的大神——DateTime,聊聊它呗!

编码的时候有没有经常遇到时间的问题,比如时不时用时间作为查询的条件,获取系统的时间等等,时间这东西,谁用谁知道!

1、我们先看看在输出的占位符里边怎样控制日期的格式,啥也不说,来点干货

#region 在输出的占位符里边控制时间的格式              DateTime dateTime = DateTime.Now;            Console.WriteLine("d = {0:d}", dateTime);              Console.WriteLine("D = {0:D}", dateTime);              Console.WriteLine("f = {0:f}", dateTime);              Console.WriteLine("F = {0:F}", dateTime);               Console.WriteLine("g = {0:g}", dateTime);              Console.WriteLine("G = {0:G}", dateTime);              Console.WriteLine("M = {0:M}", dateTime);              Console.WriteLine("R = {0:R}", dateTime);              Console.WriteLine("s = {0:s}", dateTime);              Console.WriteLine("t = {0:t}", dateTime);              Console.WriteLine("T = {0:T}", dateTime);              Console.WriteLine("u = {0:u}", dateTime);            Console.WriteLine("U = {0:U}", dateTime);             Console.WriteLine("Y = {0:Y}", dateTime);             Console.WriteLine("Month = " + dateTime.Month);             Console.WriteLine("Day Of Week = " + dateTime.DayOfWeek);                  Console.WriteLine("Time Of Day = " + dateTime.TimeOfDay);                 Console.WriteLine("DateTime.Ticks = " + dateTime.Ticks);            #endregion

效果图如下:

2、取得月的第一天和最后一天,不解释,直接上例子

1.///  2./// 取得某月的第一天 3.///  4./// 要取得月份第一天的时间 5./// 
6.private DateTime FirstDayOfMonth(DateTime datetime) 7.{ 8.return datetime.AddDays(1 - datetime.Day); 9.} 10.11./**//// 12./// 取得某月的最后一天 13./// 14./// 要取得月份最后一天的时间 15.///
16.private DateTime LastDayOfMonth(DateTime datetime) 17.18.return datetime.AddDays(1 - datetime.Day).AddMonths(1).AddDays(-1); 19.} 20.21./**//// 22./// 取得上个月第一天 23./// 24./// 要取得上个月第一天的当前时间 25.///
26.private DateTime FirstDayOfPreviousMonth(DateTime datetime) 27.{ 28.return datetime.AddDays(1 - datetime.Day).AddMonths(-1); 29.} 30.31./**//// 32./// 取得上个月的最后一天 33./// 34./// 要取得上个月最后一天的当前时间 35.///
36.private DateTime LastDayOfPrdviousMonth(DateTime datetime) 37.{ 38.return datetime.AddDays(1 - datetime.Day).AddDays(-1); 39.}

3、换做tostring()方式输出也可以,只要传入相关的格式控制符即可,直接上例子

#region 用tostring的方式显示格式            String[] format = {           "d", "D",           "f", "F",           "g", "G",           "m",           "r",           "s",           "t", "T",           "u", "U",           "y",           "dddd, MMMM dd yyyy",           "ddd, MMM d \"'\"yy",           "dddd, MMMM dd",           "M/yy",           "dd-MM-yy",       };            String date;            for (int i = 0; i < format.Length; i++)            {                date = dateTime.ToString(format[i], DateTimeFormatInfo.InvariantInfo);                Console.WriteLine(String.Concat(format[i], " :", date));            }            #endregion

效果图如下:

4、时间差的计算,使用TimeSpan就ok了,TimeSpan有很多属性,可以在网上查到,这里举个小例子,说明其常规用法

DateTime d1 =new DateTime(2013,8,1,15,36,05);DateTime d2 =new DateTime(2013,9,12,20,16,35);TimeSpan d3 = d2.Subtract(d1);LblTime.Text = "相差:"+d3.Days.ToString()+"天"+d3.Hours.ToString()+"小时"+d3.Minutes.ToString()+"分钟"+d3.Seconds.ToString()+"秒";

5、怎样知道某一年的某月有多少天呢?呵呵,so easy,瞬间搞定

int days = DateTime.DaysInMonth(2013, 8);//days = 31;

6、在用时间区间做查询时,记得要用>=和<=,这样查询才不会少算

strStartDate = TexTimeStart.Text.Trim() + " 00:00:00";strEndDate = TexTimeEnd.Text.Trim() + " 23:59:59";//查询用的sql语句中时间区间的处理string strSql = "select HSP_HotelID,HSP_UserName,HSP_ReturnVisitTime,ValidForceName from HSP_ReturnVisit where HSP_ReturnVisitTime >= '" + start + "' and HSP_ReturnVisitTime <= '" + end + "'";

7、今天昨天还有明天

//今天DateTime.Now.Date.ToShortDateString();//昨天:今天的日期减1DateTime.Now.AddDays(-1).ToShortDateString();                //明天:今天的日期加1DateTime.Now.AddDays(1).ToShortDateString();

8、本周上周还有下周

//本周(要知道本周的第一天就得先知道今天是星期几,从而得知本周的第一天就是几天前的那一天,要注意的是这里的每一周是从周日始至周六止                  DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString();               DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString();              //如果你还不明白,再看一下中文显示星期几的方法就应该懂了                //由于DayOfWeek返回的是数字的星期几,我们要把它转换成汉字方便我们阅读,有些人可能会用switch来一个一个地对照,其实不用那么麻烦的                              string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };                  Day[Convert.ToInt16(DateTime.Now.DayOfWeek)];                //上周,同理,一个周是7天,上周就是本周再减去7天,下周也是一样                  DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek))) - 7).ToShortDateString();               DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek))) - 7).ToShortDateString();//下周                  DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek))) + 7).ToShortDateString();               DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek))) + 7).ToShortDateString();

9、本月上个月还有下个月

//本月,很多人都会说本月的第一天嘛肯定是1号,最后一天就是下个月一号再减一天。当然这是对的 //一般的写法DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + "1"; //第一天DateTime.Parse(DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + "1").AddMonths(1).AddDays(-1).ToShortDateString();//最后一天//巧用C#里ToString的字符格式化更简便DateTime.Now.ToString("yyyy-MM-01");DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).AddDays(-1).ToShortDateString(); //上个月,减去一个月份DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(-1).ToShortDateString();DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();                //下个月,加去一个月份DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).ToShortDateString();DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(2).AddDays(-1).ToShortDateString();

10、七天后、七天前

//7天后DateTime.Now.Date.ToShortDateString();DateTime.Now.AddDays(7).ToShortDateString();                //7天前DateTime.Now.AddDays(-7).ToShortDateString();DateTime.Now.Date.ToShortDateString();

11、本年度、上年度、下年度

//本年度,用ToString的字符格式化我们也很容易地算出本年度的第一天和最后一天DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).ToShortDateString();DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).AddDays(-1).ToShortDateString();                //上年度,不用再解释了吧DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(-1).ToShortDateString();DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddDays(-1).ToShortDateString();                //下年度DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).ToShortDateString();DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(2).AddDays(-1).ToShortDateString();

12、本季度、上季度、下季度

//本季度,很多人都会觉得这里难点,需要写个长长的过程来判断。其实不用的,我们都知道一年四个季度,一个季度三个月//首先我们先把日期推到本季度第一个月,然后这个月的第一天就是本季度的第一天了DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01");//同理,本季度的最后一天就是下季度的第一天减一DateTime.Parse(DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();//下季度DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01");DateTime.Parse(DateTime.Now.AddMonths(6 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();//上季度DateTime.Now.AddMonths(-3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01");DateTime.Parse(DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();

13、各种格式的时间处理,你可以在里边找找有没有你想要的东东

#region 各种格式的时间输出            DateTime dt = new DateTime(2012, 10, 5);            dt.ToString();//2012-10-5 13:21:25             dt.ToFileTime().ToString();//127756416859912816             dt.ToFileTimeUtc().ToString();//127756704859912816             dt.ToLocalTime().ToString();//2012-10-5 21:21:25             dt.ToLongDateString().ToString();//2012年10月5日             dt.ToLongTimeString().ToString();//13:21:25             dt.ToOADate().ToString();//38661.5565508218             dt.ToShortDateString().ToString();//2012-10-5             dt.ToShortTimeString().ToString();//13:21             dt.ToUniversalTime().ToString();//2012-10-5 5:21:25             dt.Year.ToString();//2012             dt.Date.ToString();//2012-10-5 0:00:00             dt.DayOfWeek.ToString();//Saturday             dt.DayOfYear.ToString();//309             dt.Hour.ToString();//13             dt.Millisecond.ToString();//441             dt.Minute.ToString();//30             dt.Month.ToString();//10             dt.Second.ToString();//28             dt.Ticks.ToString();//632667942284412864             dt.TimeOfDay.ToString();//13:30:28.4412864             dt.ToString();//2012-10-5 13:47:04             dt.AddYears(1).ToString();//2006-10-5 13:47:04             dt.AddDays(1.1).ToString();//2012-10-6 16:10:04             dt.AddHours(1.1).ToString();//2012-10-5 14:53:04             dt.AddMilliseconds(1.1).ToString();//2012-10-5 13:47:04             dt.AddMonths(1).ToString();//2012-12-5 13:47:04             dt.AddSeconds(1.1).ToString();//2012-10-5 13:47:05             dt.AddMinutes(1.1).ToString();//2012-10-5 13:48:10             dt.AddTicks(1000).ToString();//2012-10-5 13:47:04             dt.CompareTo(dt).ToString();//0             //dt.Add(?).ToString();//问号为一个时间段             dt.Equals("2012-10-6 16:10:04").ToString();//False             dt.Equals(dt).ToString();//True             dt.GetHashCode().ToString();//1474088234             dt.GetType().ToString();//System.DateTime             dt.GetTypeCode().ToString();//DateTime             dt.GetDateTimeFormats('s')[0].ToString();//2012-10-05T14:06:25             dt.GetDateTimeFormats('t')[0].ToString();//14:06             dt.GetDateTimeFormats('y')[0].ToString();//2012年10月             dt.GetDateTimeFormats('D')[0].ToString();//2012年10月5日             dt.GetDateTimeFormats('D')[1].ToString();//2012 10 05             dt.GetDateTimeFormats('D')[2].ToString();//星期六 2012 10 05             dt.GetDateTimeFormats('D')[3].ToString();//星期六 2012年10月5日             dt.GetDateTimeFormats('M')[0].ToString();//10月5日             dt.GetDateTimeFormats('f')[0].ToString();//2012年10月5日 14:06             dt.GetDateTimeFormats('g')[0].ToString();//2012-10-5 14:06             dt.GetDateTimeFormats('r')[0].ToString();//Sat, 05 Nov 2012 14:06:25 GMT            string.Format("{0:d}", dt);//2012-10-5             string.Format("{0:D}", dt);//2012年10月5日             string.Format("{0:f}", dt);//2012年10月5日 14:23             string.Format("{0:F}", dt);//2012年10月5日 14:23:23             string.Format("{0:g}", dt);//2012-10-5 14:23             string.Format("{0:G}", dt);//2012-10-5 14:23:23             string.Format("{0:M}", dt);//10月5日             string.Format("{0:R}", dt);//Sat, 05 Nov 2012 14:23:23 GMT             string.Format("{0:s}", dt);//2012-10-05T14:23:23             string.Format("{0:t}", dt);//14:23             string.Format("{0:T}", dt);//14:23:23             string.Format("{0:u}", dt);//2012-10-05 14:23:23Z             string.Format("{0:U}", dt);//2012年10月5日 6:23:23             string.Format("{0:Y}", dt);//2012年10月             string.Format("{0}", dt);//2012-10-5 14:23:23            string.Format("{0:yyyyMMddHHmmssffff}", dt);            #endregion
View Code

以上其实都比较基础,如果能够把他们封装成一个时间帮助类最好,这个就能够在程序里复用了,以后有时间了整理一下,时间是个严谨的东西,我呢,也只是整理一下而已,知识呢都是无止境的,这里只不过是学习过程中的一点点心得,只希望自己能够每天成长一点点!

另外,再说点题外话,时间对程序猿是很宝贵的,因为我们中国的特色,所以我们不可能一辈子写程序,所以趁着年轻就好好写两年程序,之后再给自己留个后路,做好职业规划,规划好人生的时间,别经常熬夜,以后日子就不会像现在一样苦逼了!

 

转载于:https://www.cnblogs.com/WeiGe/p/3318195.html

你可能感兴趣的文章
iOS按钮长按
查看>>
Shell流程控制
查看>>
CSS属性值currentColor
查看>>
[Leetcode|SQL] Combine Two Tables
查看>>
《DSP using MATLAB》Problem 7.37
查看>>
ROS lesson 1
查看>>
js笔记
查看>>
c风格字符串函数
查看>>
python基础学习第二天
查看>>
java可重入锁reentrantlock
查看>>
浅谈卷积神经网络及matlab实现
查看>>
struts2学习(9)struts标签2(界面标签、其他标签)
查看>>
Android 导入jar包 so模块--导入放置的目录
查看>>
解决ajax请求cors跨域问题
查看>>
Android Studio
查看>>
zz 圣诞丨太阁所有的免费算法视频资料整理
查看>>
【大数模板】C++大数类 大数模板
查看>>
【123】
查看>>
《收获,不止Oracle》pdf
查看>>
用户权限设置
查看>>