一、初识TimeSpan
以前有一次自己做一个登录的功能,需要进行时间比较,原来asp时代,用的是DateDiff(实际上在Microsoft.VisualBasic命名空间里的DateAndTime也有DateDiff),现在C#里面没有了。就上网找了一下,结果大家都在说TimeSpan,然后再到MSDN上翻了一遍,感觉有点硬消化不了,不过也勉强把我要做的功能做完了。
当然时的印象就是,TimeSpan,叫做时间片,肯定是和时间有关了,好像是处理时间计算的吧。
二、再识TimeSpan
昨天下午,又一次用到了TimeSpan,这一次,下了点功夫,研究了一下TimeSpan。这次已经不再像上次那样生硬了,多少有点心得吧,总结一下。
三、构造函数、创建TimeSpan
3.1 用时间点创建
这样创建的TimeSpan,主要是用来比较的。
DateTime Timeout = DateTime.Parse(Request.Cookies[cookieName]["timeout"]);
TimeSpan T1 = new TimeSpan(Timeout.Ticks);
TimeSpan T2 = new TimeSpan(DateTime.Now.Ticks);
if (TimeSpan.Compare(T1, T2) > 0)
{.....}
3.2 用两个时间点的差来创建,这样的TimeSpan,主要是用来获取时间的间隔,然后再处理什么的。
DateTime d1 = new DateTime(2008, 12, 25,20,12,0);
DateTime d2 = DateTime.Now;
TimeSpan ts = d2 - d1;
Response.Write("<br/>");
Response.Write(ts.TotalDays);
Response.Write("<br/>");
Response.Write(ts.TotalHours);
Response.Write("<br/>");
Response.Write(ts.TotalMinutes);
Response.Write("<br/>");
Response.Write(ts.TotalSeconds);
Response.Write("<br/>");
Response.Write("<br/>");
Response.Write(ts.Days);
Response.Write("<br/>");
Response.Write(ts.Hours);
Response.Write("<br/>");
Response.Write(ts.Minutes);
Response.Write("<br/>");
Response.Write(ts.Seconds);
Response.Write("<br/>");
四、时间片的意义,计算时间差,下面这个例子是计算秒数,判断缓存是否需要更新
//------------如果超时的时间过了一半,就更新cookie
TimeSpan ts3 = T1 - T2;
if (ts3.TotalSeconds < Timeout / 2)
UpdateUserCookie();
五、进行整天的比较,获取DateDiff的功能。
TimeSpan ts1 = new TimeSpan(d1.Ticks);
TimeSpan ts2 = new TimeSpan(d2.Ticks);
Response.Write(ts2.Days - ts1.Days);
六、获取月份、年份的差,这个就不是 TimeSpan的事儿了。
(注:这个算法来自于CSDN http://topic.csdn.net/u/20070313/15/cbba038f-8876-4681-a25f-2bcdcc55d0ed.html)
DateTime dt1 = DateTime.Now;
DateTime dt2 = new DateTime(2005, 3, 1);
int year = dt1.Year - dt2.Year; //相差的年份
int month = dt1.Year * 12 + dt1.Month - dt2.Year * 12 - dt2.Month; //相关的月份