zoukankan      html  css  js  c++  java
  • 学习笔记: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;   //相关的月份

  • 相关阅读:
    Linux 关机和重启命令
    Linux ubuntu安装ftp服务器
    C++ map和unsorted_map底层实现
    C++中的那些容器在使用时,哪些情况下迭代器会失效
    虚函数表的构造
    C++容器 priority_queue,堆的实现
    c++11中的move是否会改变对象的地址
    (转)关于linux中内核编程中结构体的赋值操作(结构体指定初始化)
    无参方法
    类和对象
  • 原文地址:https://www.cnblogs.com/xpnew/p/1362817.html
Copyright © 2011-2022 走看看