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

即便在程序的世界里也依然如此,因为时间从没有离开过我们,我们总能品尝到时间的味道,这不在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. 洛谷P3258松鼠的新家

    题目传送门 恩,很明显的一个树剖题,配合树上差分其实也并不难,不过无奈蒟蒻树剖还没那么熟练,而且树上差分也做的少,所以这题愣是做了一中午......唉,果然我还是太菜了.恩,具体做法在代码中解释吧: ...

  2. Continuous Subarray Sum II(LintCode)

    Continuous Subarray Sum II   Given an circular integer array (the next element of the last element i ...

  3. 「2018山东一轮集训」Game

    %%神仙题 首先转化一波模型:可以把原问题看成,初始每个位置有0/1个石子,1操作看成从一个位置拿走一个石子,2操作看成从l[i]拿走一个石子,并在[ l[i]+1 , r[i] ]的每个位置放上一个 ...

  4. Codeforces 449D Jzzhu and Numbers(高维前缀和)

    [题目链接] http://codeforces.com/problemset/problem/449/D [题目大意] 给出一些数字,问其选出一些数字作or为0的方案数有多少 [题解] 题目等价于给 ...

  5. 【后缀自动机】hihocoder1449 后缀自动机三·重复旋律6

    解题方法提示 小Hi:上次我们已经学习了后缀自动机了,今天我们再来解决一个用到后缀自动机的问题. 小Ho:好!那我们开始吧! 小Hi:现在我们要对K=1..length(S)求出所有长度为K的子串中出 ...

  6. 【单调队列DP+manacher】BZOJ2565-最长双回文串

    [题目大意] 输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串. [思路] 首先普通地求manacher,然后求出以每个位置为左端点和右端 ...

  7. idea创建多个Module

    练习不同的算法时,如果不断的创建工程未免过于麻烦,可以使用在一个工程下创建多个Module的方式,编写多种不同的算法,这些模块互相独立,都有一个入口函数(main),并且,对于创建好的Module,如 ...

  8. System.Object 基类

    System.Object在.Net中是所有类型的基类,任何类型都直接或间接地继承自System.Object.没有指定基类的类型都默认继承于System.Object. 基类特性 正由于所有的类型都 ...

  9. 将HTML元素转换成图片供用户下载(html2canvas + canvas2Image)

    这是项目中遇到的一个问题,起初觉得把一个html元素生成图片,提供给用户下载的需求挺容易实现的,毕竟看过一些截图的插件,但是在真正操作中遇到了各种各样的问题,比如移动端上截图显示不清晰,html元素中 ...

  10. ORACLE EBS FORM 二次开发常用小技巧

    1.锁住当前行 Set_Item_Instance_Property('main.import_flag', CURRENT_RECORD, UPDATE_ALLOWED, PROPERTY_OFF) ...