学习笔记: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;   //相关的月份

 

转载于:https://www.cnblogs.com/xpnew/archive/2008/12/27/1362817.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值