C#时间的味道——任时光匆匆我只在乎你
如果没有遇见你,我将会是在哪里?日子过的怎么样人生是否要珍惜...任时光匆匆我只在乎你,心甘情愿感染你的气息,人生几何能得到知己...一首邓丽君的《我只在乎你》不禁令我唏嘘不已,这些年离我们而去的还有哥哥张国荣,我们忘不了他那忧郁的眼神,偶尔也会怀念家驹,每当心里难过的时候,那首《海阔天空》总能让我找到活着的意义,当然了还有乔布斯,他比我们更了解时间的意义,时间是一把无情刻刀,改变了我们的模样,也改变了这个世界,听着这些歌,我们的思绪仿佛回到了过去,回到了童年,怀念一些人和一些事,这就是时间存在的意义。
即便在程序的世界里也依然如此,因为时间从没有离开过我们,我们总能品尝到时间的味道,这不在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./// <summary> 2./// 取得某月的第一天 3./// </summary> 4./// <param name="datetime">要取得月份第一天的时间</param> 5./// <returns></returns> 6.private DateTime FirstDayOfMonth(DateTime datetime) 7.{ 8.return datetime.AddDays(1 - datetime.Day); 9.} 10. 11./**//// <summary> 12./// 取得某月的最后一天 13./// </summary> 14./// <param name="datetime">要取得月份最后一天的时间</param> 15./// <returns></returns> 16.private DateTime LastDayOfMonth(DateTime datetime) 17. 18.return datetime.AddDays(1 - datetime.Day).AddMonths(1).AddDays(-1); 19.} 20. 21./**//// <summary> 22./// 取得上个月第一天 23./// </summary> 24./// <param name="datetime">要取得上个月第一天的当前时间</param> 25./// <returns></returns> 26.private DateTime FirstDayOfPreviousMonth(DateTime datetime) 27.{ 28.return datetime.AddDays(1 - datetime.Day).AddMonths(-1); 29.} 30. 31./**//// <summary> 32./// 取得上个月的最后一天 33./// </summary> 34./// <param name="datetime">要取得上个月最后一天的当前时间</param> 35./// <returns></returns> 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();//昨天:今天的日期减1 DateTime.Now.AddDays(-1).ToShortDateString();//明天:今天的日期加1 DateTime.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 GMTstring.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:23string.Format("{0:yyyyMMddHHmmssffff}", dt);#endregion
View Code
以上其实都比较基础,如果能够把他们封装成一个时间帮助类最好,这个就能够在程序里复用了,以后有时间了整理一下,时间是个严谨的东西,我呢,也只是整理一下而已,知识呢都是无止境的,这里只不过是学习过程中的一点点心得,只希望自己能够每天成长一点点!
另外,再说点题外话,时间对程序猿是很宝贵的,因为我们中国的特色,所以我们不可能一辈子写程序,所以趁着年轻就好好写两年程序,之后再给自己留个后路,做好职业规划,规划好人生的时间,别经常熬夜,以后日子就不会像现在一样苦逼了!
转载于:https://www.cnblogs.com/WeiGe/p/3318195.html
C#时间的味道——任时光匆匆我只在乎你相关推荐
- 任时光匆匆流走。。。。
2019独角兽企业重金招聘Python工程师标准>>> 从去年大三过后的暑假,来到这个公司已经有七个月的时间了,虽说来的时间也不算短了,但是总感觉时间在一点一点儿的浪费掉.. 一直以 ...
- 生日快乐程序_时光匆匆,爱你不变——祝星广十七岁生日快乐
十七岁 一个花季少女的青春年华 十七岁 一个懵懂少年的一指流沙 十七岁 的林志颖凭借一首<十七岁的雨季>红遍了大江南北 至今仍是娱乐圈不老的神话 而在2019年8月份我们的星广传媒也十七岁 ...
- 时光匆匆地流走而我们也在不断地成长放到
总是以一颗感恩的心漫步滚滚红尘,总是以不伤害到谁而倍加小心,茫茫人海,一份缘来之不易,一份尊重胜过万语千言:踏入纤尘,我们拥有相同的脆弱,只是我们把脆弱习惯了隐藏而已,因为心怀坦荡,才不拘于小节,懂得 ...
- 那些年我们追过的C#奇葩关键字——忐忑
为什么80%的码农都做不了架构师?>>> Spiga Posts - 7, Articles - 0, Comments - 133 Cnblogs Dashboard Log ...
- 悄悄是别离的笙箫,夏虫也为我沉默
早就知道相聚的时光不会很长了,所以在这屈指可数的日子里不敢肆意挥霍但又不知怎么去最大化地利用,还没说完的话赶紧说,还没解决的问题赶紧提,还没看完的书赶紧看······待办事情很多,时间明显不够.时光匆 ...
- 时光荏苒,岁月静好-----2013年终总结
我们所处的每一分每一秒都将成为过往,终将被时光埋在记忆的深处. 在时间之外,感叹时光匆匆,用文字的方式记叙下,那些时光荏苒的痕迹,便可成永恒. ------题记 时光荏苒,岁月如梭.转眼之间,我们又 ...
- 转行学计算机测试,转行软件测试后悔了
原标题:转行软件测试后悔了 很多时候,都在想当初做的转行软件测试行业的决定是对的吗?现在后悔还来得及吗? 其实我刚参加织雀教育的培训班一个月,各方面都学起来感觉有难度,毕竟是零基础转行的,但no pa ...
- 他毕业两年,博客一年,时间
这是2014年10个月.时光匆匆,看到该公司的新鲜新的一年.有时,一个想法.其实,我在这个城市工作了两年多,总是觉得自己老了. 从一般再聘请两名现在厂家机构和学校,懵懵懂懂从校园到完成社区,来写个总结 ...
- html转图片 workflow,用 Workflow + Day one 给未来的自己做时间履历 | Matrix 精选
Matrix 是少数派的全新产品,一个纯净.小众的写作平台,我们主张分享真实的产品体验,有实用价值的互联网领域经验.思考.欢迎忠于写作,喜好分享的朋友参与内测.我们会不定期挑选 Matrix 最优质的 ...
最新文章
- 数据结构课程上机参考代码
- 《JavaScript DOM编程艺术》学习回顾4
- 常见的HTML元素及常见检查点
- 在 Java 中,为什么需要创建内部类对象之前需要先创建外部类对象
- java猜拳游戏代码_Java实现简单猜拳游戏
- 【重磅】Google官方推出了免费的、中文的、机器学习初级课程。
- 解决手机网站点击出现蓝色框的问题
- Abp Vnext应用程序项目中添加docker支持的小结
- abap--关于集(set)的读取(如读取成本中心组下的所有成本中心)
- php文本框长度限制,php截取富文本框中的固定长度的字符
- presto cube等复杂聚合函数
- php学习分享心得吧
- 【ESIM】论文阅读笔记:文本蕴含之ESIM
- Linux(6)文件和磁盘管理
- JDK中提供的类(常用API)
- coolfire文章之三
- 不要错过!第十一届CDA考试Level Ⅰ优秀考生采访
- ftp服务器和共享文件夹权限设置,ftp服务器共享文件夹权限设置
- clickhouse ARRAY JOIN函数
- matlab模电仿真 微盘,模拟电子仿真实验(Multisim模电篇)
热门文章
- Java游戏小李飞镖,安全工程与虚拟技术部双节活动
- 将一个字段的多个记录值合在一行
- Leetcode刷题指南和top100题目
- python处理中文编码问题总结
- leetcode前缀树java_Java实现 LeetCode 208 实现 Trie (前缀树)
- 为什么红黑树查询快_为什么工程中都喜欢用红黑树,而不是其他平衡二叉查找树呢?...
- tp5部署到nginx后所有分页404的解决办法
- 理解lua中的metatable和__index
- AIR:使用 HTML + Javascript 开发桌面应用
- 十全干货:核心游戏系统架构设计