学习笔记:TimeSpan(时间片),以及各种时间差的算法

一、初识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;   //相关的月份

 

posted @ 2008-12-27 12:21  柳城之城  阅读(5573)  评论(2编辑  收藏  举报