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

即便在程序的世界里也依然如此,因为时间从没有离开过我们,我们总能品尝到时间的味道,这不在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. ubuntu要安装新软件,已有deb安装包

    如果ubuntu要安装新软件,已有deb安装包(例如:iptux.deb),但是无法登录到桌面环境.那该怎么安装?答案是:使用dpkg命令.dpkg命令常用格式如下:sudo dpkg -I iptu ...

  2. MS SQL Server迁移至Azure SQL(官方工具)

    前面,我有尝试过将MS SQL Server数据数据迁移至Azure SQL,请参考<MS SQL Server迁移至Azure SQL>,使用的是第三方工具,但现在官方更新了工具,我们尝 ...

  3. LOJ #6285. 数列分块入门 9-分块(查询区间的最小众数)

    #6285. 数列分块入门 9 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给 ...

  4. MediaPlayer滑动不准的问题

    因为MediaPlayer在seekto是异步进行的,如果在滑动过程中暂停,会导致滑动不准确的情况,这时候就需要添加滑动完成的监听即setOnSeekCompleteListener

  5. If you want to allow applications containing errors to be published on the server

    If you want to allow applications containing errors to be published on the server, enable the Allow ...

  6. 【BZOJ 3166】【HEOI 2013】Alo

    http://www.lydsy.com/JudgeOnline/problem.php?id=3166 这道题难点在于求能对一个次大值有贡献的区间. 设这个次大值为\(a_i\),\(a_i\)左边 ...

  7. 【概率dp】【滚动数组】CDOJ1652 都市大飙车

    转移方程很显然. 因为是多段图模型,所以可以滚动数组优化一维空间. #include<cstdio> #include<cstring> using namespace std ...

  8. 【数论】nefu118 n!后面有多少个0

    就是求n!有多少个因子2和因子5,并在这两者中取较小者.因为必须要一个2和一个5才能拼出1个10. 显然2的数量多于5,因此只需要求n!有多少个因子5即可. n!中素因子p的个数= [n/p]+[n/ ...

  9. 使用CURL抓取淘宝页面

    /** * 根据地址抓取淘宝页面html代码 * @param type $url 地址 * @return boolean */ public function getTaoBaoHtml($url ...

  10. easyui-textbox input输入框的一种取值方式

    1.html文件 <td> <input id="clientPhone" type="text" name="clientPhon ...