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

即便在程序的世界里也依然如此,因为时间从没有离开过我们,我们总能品尝到时间的味道,这不在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、取得月的第一天和最后一天,不解释,直接上例子

./// <summary>
./// 取得某月的第一天
./// </summary>
./// <param name="datetime">要取得月份第一天的时间</param>
./// <returns></returns>
.private DateTime FirstDayOfMonth(DateTime datetime)
.{
.return datetime.AddDays( - datetime.Day);
.}
.
./**//// <summary>
./// 取得某月的最后一天
./// </summary>
./// <param name="datetime">要取得月份最后一天的时间</param>
./// <returns></returns>
.private DateTime LastDayOfMonth(DateTime datetime)
.
.return datetime.AddDays( - datetime.Day).AddMonths().AddDays(-);
.}
.
./**//// <summary>
./// 取得上个月第一天
./// </summary>
./// <param name="datetime">要取得上个月第一天的当前时间</param>
./// <returns></returns>
.private DateTime FirstDayOfPreviousMonth(DateTime datetime)
.{
.return datetime.AddDays( - datetime.Day).AddMonths(-);
.}
.
./**//// <summary>
./// 取得上个月的最后一天
./// </summary>
./// <param name="datetime">要取得上个月最后一天的当前时间</param>
./// <returns></returns>
.private DateTime LastDayOfPrdviousMonth(DateTime datetime)
.{
.return datetime.AddDays( - datetime.Day).AddDays(-);
.}

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 = ; 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(,,,,,);
DateTime d2 =new DateTime(,,,,,);
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(, );
//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(-).ToShortDateString(); //明天:今天的日期加1
DateTime.Now.AddDays().ToShortDateString();

8、本周上周还有下周

//本周(要知道本周的第一天就得先知道今天是星期几,从而得知本周的第一天就是几天前的那一天,要注意的是这里的每一周是从周日始至周六止
DateTime.Now.AddDays(Convert.ToDouble(( - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString();
DateTime.Now.AddDays(Convert.ToDouble(( - 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(( - Convert.ToInt16(DateTime.Now.DayOfWeek))) - ).ToShortDateString();
DateTime.Now.AddDays(Convert.ToDouble(( - Convert.ToInt16(DateTime.Now.DayOfWeek))) - ).ToShortDateString();
//下周
DateTime.Now.AddDays(Convert.ToDouble(( - Convert.ToInt16(DateTime.Now.DayOfWeek))) + ).ToShortDateString();
DateTime.Now.AddDays(Convert.ToDouble(( - Convert.ToInt16(DateTime.Now.DayOfWeek))) + ).ToShortDateString();

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

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

//上个月,减去一个月份
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(-).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddDays(-).ToShortDateString();

//下个月,加去一个月份
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths().ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths().AddDays(-).ToShortDateString();

10、七天后、七天前

//7天后
DateTime.Now.Date.ToShortDateString();
DateTime.Now.AddDays().ToShortDateString(); //7天前
DateTime.Now.AddDays(-).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().AddDays(-).ToShortDateString(); //上年度,不用再解释了吧
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(-).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddDays(-).ToShortDateString(); //下年度
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears().ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears().AddDays(-).ToShortDateString();

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

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

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

#region 各种格式的时间输出
DateTime dt = new DateTime(, , );
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().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().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().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')[].ToString();//2012-10-05T14:06:25
dt.GetDateTimeFormats('t')[].ToString();//14:06
dt.GetDateTimeFormats('y')[].ToString();//2012年10月
dt.GetDateTimeFormats('D')[].ToString();//2012年10月5日
dt.GetDateTimeFormats('D')[].ToString();//2012 10 05
dt.GetDateTimeFormats('D')[].ToString();//星期六 2012 10 05
dt.GetDateTimeFormats('D')[].ToString();//星期六 2012年10月5日
dt.GetDateTimeFormats('M')[].ToString();//10月5日
dt.GetDateTimeFormats('f')[].ToString();//2012年10月5日 14:06
dt.GetDateTimeFormats('g')[].ToString();//2012-10-5 14:06
dt.GetDateTimeFormats('r')[].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

以上其实都比较基础,如果能够把他们封装成一个时间帮助类最好,这个就能够在程序里复用了,以后有时间了整理一下,时间是个严谨的东西,我呢,也只是整理一下而已,知识呢都是无止境的,这里只不过是学习过程中的一点点心得,只希望自己能够每天成长一点点!
另外,再说点题外话,时间对程序猿是很宝贵的,因为我们中国的特色,所以我们不可能一辈子写程序,所以趁着年轻就好好写两年程序,之后再给自己留个后路,做好职业规划,规划好人生的时间,别经常熬夜,以后日子就不会像现在一样苦逼了!

C#时间的味道——任时光匆匆我只在乎你的更多相关文章

  1. 这是最好的时光 这是最坏的时光 v0.1.1.1

    这是最好的时光 这是最坏的时光 v0.1.1.1 1.2 学校的生活二三事之大学 话说上一回,扯了一下我青涩的少年往事,大家反响不一,有叫好的,有吐槽的,有字字码过的,也有一目十行的.我的心情也是随着 ...

  2. 我是IT小小鸟,老师我之前上传了!!!!老是请您看到我

    我是IT小小鸟读后感 世界上没有一蹴而就的成功者,只有头悬梁锥刺股的奋斗者.蜉蝣向往大鹏的辉煌,却不曾知大鹏以往的汗水.蜉蝣之所以为蜉蝣,是因为它犹如井底之蛙,目光短浅,之盲目地羡慕成功者,而大鹏之所 ...

  3. 我是IT小小鸟

    我是IT小小鸟读后感 世界上没有一蹴而就的成功者,只有头悬梁锥刺股的奋斗者.蜉蝣向往大鹏的辉煌,却不曾知大鹏以往的汗水.蜉蝣之所以为蜉蝣,是因为它犹如井底之蛙,目光短浅,之盲目地羡慕成功者,而大鹏之所 ...

  4. An Oblivious Watermarking for 3-D Polygonal Meshes Using Distribution of Vertex Norms

    An Oblivious Watermarking for 3-D Polygonal Meshes Using Distribution of Vertex Norms 转眼就11月底了,突然开始有 ...

  5. 淡淡de馨香---职业尊严

    大学四年时光匆匆而过,仿佛一切都不曾远去,那种熟悉又激动的感觉好似就在昨天,但是.一切都仅仅是一种感觉,在现实面前没有谁能够逆天,在被遗忘的什么时候,曾经是想着无数的梦想与自定义,同样也是在被遗忘的什 ...

  6. 【BFS + Hash】拼图——携程2017春招编程题2

    写在前面 前天参加了携程的网测--还是感觉自己太!渣!了!    _(:з」∠)_ 时光匆匆啊,已经到了开始思考人生的时候了(算了不矫情了)--总之写个博客来督促一下自己.之前太懒了,很多时候都是输在 ...

  7. 手把手教你全家桶之React(一)

    前言 最近项目用到react,其实前年我就开始接触react,时光匆匆,一直没有时间整理下来(太懒啦)!如今再次用到,称工作间隙,对全家桶做一次总结,项目源码地址.废话不多说,上码. 创建一个文件目录 ...

  8. 从spring框架中的事件驱动模型出发,优化实际应用开发代码

    一.事件起源 相信很多人在使用spring框架进行开发时,都会遇到这样的需求:在spring启动后,立即加载部分资源(例如:spring启动后立刻加载资源初始化到redis中).当我去解决这个问题时发 ...

  9. WPF 10天修炼 第十天- WPF数据绑定

    WPF数据绑定 数据绑定到元素属性是将源对象指定为一个WPF元素,并且源属性是一个依赖属性,依赖属性内置了变更通知.当改变源对象依赖属性值之后,绑定目标可以立即得到更新,开发人员不需要手动编写响应事件 ...

随机推荐

  1. #1054 - Unknown column 'category' in 'field list'

    导致这个问题的原因有: 1.确实没有这个字段 2.写错表了,你以为写到想要的表,没想到写到别处去了,当然没有这个字段了,这时候检查一下sql语句是不是选错了表,或者选错了数据库

  2. (4) go 运算符

    1. (1) 整数相除,结果是小数,会舍去小数部分 (2) 使用自增自减时, ++  -- 必须单独一行 (3)只有后 a++,没有前 ++a 2. 3. 4. 5 6. 7. 8.

  3. 小试牛刀之Django

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  4. 子查询在DELETE语句中的应用

    子查询在DELETE 中唯一可以应用的位置就是WHERE 子句,使用子查询可以完成复杂的数据删除控制.其使用方式与SELECT 语句中的子查询基本相同,而且也可以使用相关子查询等高级的特性.下面的SQ ...

  5. START法则

    用途:在做项目总结以及阶段性报告等的时候,可以很好的帮自己对整个工作过程进行梳理和总结,很好的表现出自己分析问题的清晰性.条理性和逻辑性. 定义:STAR法则是情境(situation).任务(tas ...

  6. 【Trie】MIPT-2016 Pre-Finals Workshop, Taiwan NTU Contest, Sunday, March 27, 2016 Problem B. Be Friends

    题意:一个n个点的完全图,点带权,边权是两端点点权的异或值.问你最小生成树. 一个性质,把所有点按照二进制最高位是否为1划分为2个集合,那么这两个集合间只会有一条边.可以递归处理. 把所有点建成01T ...

  7. 【贪心】【堆】AtCoder Grand Contest 018 C - Coins

    只有两维的时候,我们显然要按照Ai-Bi排序,然后贪心选取. 现在,也将人按照Ai-Bi从小到大排序,一定存在一个整数K,左侧的K个人中,一定有Y个人取银币,K-Y个人取铜币: 右侧的X+Y+Z-K个 ...

  8. 【OpenJudge9275】【Usaco2009 Feb】【递推】Bullcow

    Bullcow 总时间限制: 12000ms 单个测试点时间限制: 1000ms 内存限制: 131072kB [描述] 一年一度的展会要来临了,农民约翰想要把N(1 <= N <= 10 ...

  9. codevs 3641 上帝选人

    3641 上帝选人  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题目描述 Description 世界上的人都有智商IQ和情商EQ.我们用两个数字来表示人的 ...

  10. 解决eclipse中java代码注释变成乱码的问题

    Eclipse JAVA文件注释乱码将别人的项目或JAVA文件导入到自己的Eclipse中时,常常会出现JAVA文件的中文注释变成乱码的情况,主要原因就是别人的IDE编码格式和自己的Eclipse编码 ...