C# 計(jì)算時(shí)間差 用timespan函數(shù)

          TimeSpan 結(jié)構(gòu)  表示一個(gè)時(shí)間間隔。

          命名空間:System

          程序集:mscorlib(在 mscorlib.dll 中)

          1.DateTime值類(lèi)型代表了一個(gè)從公元0001年1月1日0點(diǎn)0分0秒到公元9999年12月31日23點(diǎn)59分59秒之間的具體日期時(shí)刻。因此,你可以用DateTime值類(lèi)型來(lái)描述任何在想象范圍之內(nèi)的時(shí)間。一個(gè)DateTime值代表了一個(gè)具體的時(shí)刻
          2.TimeSpan值包含了許多屬性與方法,用于訪(fǎng)問(wèn)或處理一個(gè)TimeSpan值
          下面的列表涵蓋了其中的一部分:
          Add:與另一個(gè)TimeSpan值相加。
          Days:返回用天數(shù)計(jì)算的TimeSpan值。
          Duration:獲取TimeSpan的絕對(duì)值。
          Hours:返回用小時(shí)計(jì)算的TimeSpan值
          Milliseconds:返回用毫秒計(jì)算的TimeSpan值。
          Minutes:返回用分鐘計(jì)算的TimeSpan值。
          Negate:返回當(dāng)前實(shí)例的相反數(shù)。
          Seconds:返回用秒計(jì)算的TimeSpan值。
          Subtract:從中減去另一個(gè)TimeSpan值。
          Ticks:返回TimeSpan值的tick數(shù)。
          TotalDays:返回TimeSpan值表示的天數(shù)。
          TotalHours:返回TimeSpan值表示的小時(shí)數(shù)。
          TotalMilliseconds:返回TimeSpan值表示的毫秒數(shù)。
          TotalMinutes:返回TimeSpan值表示的分鐘數(shù)。
          TotalSeconds:返回TimeSpan值表示的秒數(shù)。

          TimeSpan( 10, 20, 30, 40, 50 ) 10.20:30:40.0500000

          TimeSpan( 1111, 2222, 3333, 4444, 5555 ) 1205.22:47:09.5550000

          TimeSpan (Int32, Int32, Int32) 將新的 TimeSpan 初始化為指定的小時(shí)數(shù)、分鐘數(shù)和秒數(shù)。

          TimeSpan (Int32, Int32, Int32, Int32) 將新的 TimeSpan 初始化為指定的天數(shù)、小時(shí)數(shù)、分鐘數(shù)和秒數(shù)。

          TimeSpan (Int32, Int32, Int32, Int32, Int32) 將新的 TimeSpan 初始化為指定的天數(shù)、小時(shí)數(shù)、分鐘數(shù)、秒數(shù)和毫秒數(shù)。


          ASP.NET 中,兩個(gè)時(shí)間相減,得到一個(gè) TimeSpan 實(shí)例,TimeSpan 有一些屬性:Days、TotalDays、Hours、TotalHours、Minutes、TotalMinutes、Seconds、TotalSeconds、Ticks,注意沒(méi)有 TotalTicks。

          這些屬性名稱(chēng)開(kāi)始理解有些困難,但閱讀本文后,相應(yīng)您一定茅塞頓開(kāi)。

          舉例說(shuō)明
          •時(shí)間 1 是 2010-1-2 8:43:35;
          •時(shí)間 2 是 2010-1-12 8:43:34。

          用時(shí)間 2 減時(shí)間 1,得到一個(gè) TimeSpan 實(shí)例。

          那么時(shí)間 2 比時(shí)間 1 多 9 天 23 小時(shí) 59 分 59 秒。

          那么,Days 就是 9,Hours 就是 23,Minutes 就是 59,Seconds 就是 59。

          再來(lái)看 Ticks,Tick 是一個(gè)計(jì)時(shí)周期,表示一百納秒,即一千萬(wàn)分之一秒,那么 Ticks 在這里表示總共相差多少個(gè)時(shí)間周期,即:9 * 24 * 3600 * 10000000 + 23 * 3600 * 10000000 + 59 * 60 * 10000000 + 59 * 10000000 = 8639990000000。3600 是一小時(shí)的秒數(shù)。

          TotalDays 就是把 Ticks 換算成日數(shù),即:8639990000000 / (10000000 * 24 * 3600) = 9.99998842592593。

          TotalHours 就是把 Ticks 換算成小時(shí)數(shù),即:8639990000000 / (10000000 * 3600) = 239.999722222222。

          TotalMinutes 就是把 Ticks 換算成分鐘數(shù),即:8639990000000 / (10000000 * 60) = 14399.9833333333。

          TotalSeconds 就是把 Ticks 換算成秒數(shù),即:8639990000000 / (10000000) = 863999。

          負(fù)數(shù)

          上面是較晚的日期減較早的日期,所以各屬性值為正數(shù),如果是較早的日期減較晚的日期,則屬性值為負(fù)數(shù)。

          TimeSpan(
          int days,
          int hours,
          int minutes,
          int seconds
          )

          求離最近發(fā)表時(shí)間的函數(shù)
          public string DateStringFromNow(DateTime dt)
          {
          TimeSpan span = DateTime.Now - dt;
          if (span.TotalDays > 60)
          {
          return dt.ToShortDateString();
          }
          else if ( span.TotalDays > 30 )
          {
          return "1個(gè)月前";
          }
          else if (span.TotalDays > 14)
          {
          return "2周前";
          }
          else if (span.TotalDays > 7)
          {
          return "1周前";
          }
          else if (span.TotalDays > 1)
          {
          return string.Format("{0}天前", (int)Math.Floor(span.TotalDays));
          }
          else if (span.TotalHours > 1)
          {
          return string.Format("{0}小時(shí)前", (int)Math.Floor(span.TotalHours));
          }
          else if (span.TotalMinutes > 1)
          {
          return string.Format("{0}分鐘前", (int)Math.Floor(span.TotalMinutes));
          }
          else if (span.TotalSeconds >= 1)
          {
          return string.Format("{0}秒前", (int)Math.Floor(span.TotalSeconds));
          }
          else
          {
          return "1秒前";
          }
          }

          C#中使用TimeSpan計(jì)算兩個(gè)時(shí)間的差值

          可以反加兩個(gè)日期之間任何一個(gè)時(shí)間單位。
          private string DateDiff(DateTime DateTime1, DateTime DateTime2)
          {string dateDiff = null;
          TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
          TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
          TimeSpan ts = ts1.Subtract(ts2).Duration();
          dateDiff = ts.Days.ToString()+"天"+ ts.Hours.ToString()+"小時(shí)"+ ts.Minutes.ToString()+"分鐘"+ ts.Seconds.ToString()+"秒";
          return dateDiff;
          }


          TimeSpan ts = Date1 - Date2;
          double dDays = ts.TotalDays;//帶小數(shù)的天數(shù),比如1天12小時(shí)結(jié)果就是1.5
          int nDays = ts.Days;//整數(shù)天數(shù),1天12小時(shí)或者1天20小時(shí)結(jié)果都是1


          說(shuō)明:
          1.DateTime值類(lèi)型代表了一個(gè)從公元0001年1月1日0點(diǎn)0分0秒到公元9999年12月31日23點(diǎn)59分59秒之間的具體日期時(shí)刻。因此,你可以用DateTime值類(lèi)型來(lái)描述任何在想象范圍之內(nèi)的時(shí)間。一個(gè)DateTime值代表了一個(gè)具體的時(shí)刻
          2.TimeSpan值包含了許多屬性與方法,用于訪(fǎng)問(wèn)或處理一個(gè)TimeSpan值
          下面的列表涵蓋了其中的一部分:
          Add:與另一個(gè)TimeSpan值相加。
          Days:返回用天數(shù)計(jì)算的TimeSpan值。
          Duration:獲取TimeSpan的絕對(duì)值。
          Hours:返回用小時(shí)計(jì)算的TimeSpan值
          Milliseconds:返回用毫秒計(jì)算的TimeSpan值。
          Minutes:返回用分鐘計(jì)算的TimeSpan值。
          Negate:返回當(dāng)前實(shí)例的相反數(shù)。
          Seconds:返回用秒計(jì)算的TimeSpan值。
          Subtract:從中減去另一個(gè)TimeSpan值。
          Ticks:返回TimeSpan值的tick數(shù)。
          TotalDays:返回TimeSpan值表示的天數(shù)。
          TotalHours:返回TimeSpan值表示的小時(shí)數(shù)。
          TotalMilliseconds:返回TimeSpan值表示的毫秒數(shù)。
          TotalMinutes:返回TimeSpan值表示的分鐘數(shù)。
          TotalSeconds:返回TimeSpan值表示的秒數(shù)。


          /// <summary>
          /// 日期比較
          /// </summary>
          /// <param name="today">當(dāng)前日期</param>
          /// <param name="writeDate">輸入日期</param>
          /// <param name="n">比較天數(shù)</param>
          /// <returns>大于天數(shù)返回true,小于返回false</returns>
          private bool CompareDate(string today, string writeDate, int n)
          {
          DateTime Today = Convert.ToDateTime(today);
          DateTime WriteDate = Convert.ToDateTime(writeDate);
          WriteDate = WriteDate.AddDays(n);
          if (Today >= WriteDate)
          return false;
          else
          return true;
          }



          示例代碼:

          <table width="100%" border="1" cellspacing="0" cellpadding="0">

          <tr>

          <td>TimeSpan('T','2002-10-1','2002-1-1')</td>

          <td>&nbsp;<!-- NoahValue ValueName="TimeSpan('T','2002-10-1','2002-1-1')" --></td>

          </tr>

          <tr>

          <td>TimeSpan('d','2002-10-1','2002-1-1')</td>

          <td>&nbsp;<!-- NoahValue ValueName="TimeSpan('d','2002-10-1','2002-1-1')" --></td>

          </tr>

          <tr>

          <td>TimeSpan('h','2002-10-1','2002-1-1')</td>

          <td>&nbsp;<!-- NoahValue ValueName="TimeSpan('h','2002-10-1','2002-1-1')" --></td>

          </tr>

          <tr>

          <td>TimeSpan('u','2002-10-1','2002-1-1')</td>

          <td>&nbsp;<!-- NoahValue ValueName="TimeSpan('u','2002-10-1','2002-1-1')" --></td>

          </tr>

          <tr>

          <td>TimeSpan('m','2002-10-1','2002-1-1')</td>

          <td>&nbsp;<!-- NoahValue ValueName="TimeSpan('m','2002-10-1','2002-1-1')" --></td>

          </tr>

          <tr>

          <td>TimeSpan('s','2002-10-1','2002-1-1')</td>

          <td>&nbsp;<!-- NoahValue ValueName="TimeSpan('s','2002-10-1','2002-1-1')" --></td>

          </tr>

          <tr>

          <td>TimeSpan('D','2002-10-1','2002-1-1')</td>(責(zé)任編輯:麥田守望者)



          在定義Date數(shù)據(jù)類(lèi)型時(shí)候,必須注意下面三點(diǎn):

          1. Date數(shù)值必須以數(shù)字符號(hào)"#"括起來(lái)。

          2. Date數(shù)值中的日期數(shù)據(jù)可有可無(wú),如果有必須符合格式"m/d/yyyy"。

          3. Date數(shù)值中的時(shí)間數(shù)據(jù)可有可無(wú),如果有必須和日期數(shù)據(jù)通過(guò)空格分開(kāi),并且時(shí)分秒之間以":"分開(kāi)。

          一.DateTime和TimeSpan的關(guān)系和區(qū)別:

          DateTime和TimeSpan是Visual Basic .Net中用以處理時(shí)間日期類(lèi)型數(shù)據(jù)的二個(gè)主要的結(jié)構(gòu),這二者的區(qū)別在于,DatTime表示一個(gè)固定的時(shí)間,而TimeSpan表示的是一個(gè)時(shí)間間隔, 即一段時(shí)間。在下面介紹的程序示例中,TimeSpan就用以當(dāng)前時(shí)間和給定時(shí)間之差。

          二.DateTime和TimeSpan中的常用成員及其說(shuō)明:

          DateTime結(jié)構(gòu)和TimeSpan結(jié)構(gòu)提供了豐富的方法和屬性,通過(guò)這些方法和屬性,幾乎可以直接處理任何時(shí)間日期類(lèi)型數(shù)據(jù)。表01和表02分別是DateTime結(jié)構(gòu)的常用屬性和常用方法及其說(shuō)明:
          屬性 說(shuō)明
          Date 獲取此實(shí)例的日期部分。
          Day 獲取此實(shí)例所表示的日期為該月中的第幾天。
          DayOfWeek 獲取此實(shí)例所表示的日期是星期幾。
          DayOfYear 獲取此實(shí)例所表示的日期是該年中的第幾天。
          Hour 獲取此實(shí)例所表示日期的小時(shí)部分。
          Millisecond 獲取此實(shí)例所表示日期的毫秒部分。
          Minute 獲取此實(shí)例所表示日期的分鐘部分。
          Month 獲取此實(shí)例所表示日期的月份部分。
          Now 創(chuàng)建一個(gè)DateTime實(shí)例,它是此計(jì)算機(jī)上的當(dāng)前本地日期和時(shí)間。
          Second 獲取此實(shí)例所表示日期的秒部分。
          TimeOfDay 獲取此實(shí)例的當(dāng)天的時(shí)間。
          Today 獲取當(dāng)前日期。
          Year 獲取此實(shí)例所表示日期的年份部分。

          表01:DateTime類(lèi)的常用屬性及其說(shuō)明
          方法 說(shuō)明
          Add 將指定的TimeSpan的值加到此實(shí)例的值上。
          AddDays 將指定的天數(shù)加到此實(shí)例的值上。
          AddHours 將指定的小時(shí)數(shù)加到此實(shí)例的值上。
          AddMilliseconds 將指定的毫秒數(shù)加到此實(shí)例的值上。
          AddMinutes 將指定的分鐘數(shù)加到此實(shí)例的值上。
          AddMonths 將指定的月份數(shù)加到此實(shí)例的值上。
          AddSeconds 將指定的秒數(shù)加到此實(shí)例的值上。
          AddYears 將指定的年份數(shù)加到此實(shí)例的值上。
          DaysInMonth 返回指定年份中指定月份的天數(shù)。
          IsLeapYear 返回指定的年份是否為閏年的指示。
          Parse 將日期和時(shí)間的指定字符串表示轉(zhuǎn)換成其等效的DateTime實(shí)例。
          Subtract 從此實(shí)例中減去指定的時(shí)間或持續(xù)時(shí)間。
          ToLongDateString 將此實(shí)例的值轉(zhuǎn)換為其等效的長(zhǎng)日期字符串表示形式。
          ToLongTimeString 將此實(shí)例的值轉(zhuǎn)換為其等效的長(zhǎng)時(shí)間字符串表示形式。
          ToShortTimeString 將此實(shí)例的值轉(zhuǎn)換為其等效的短時(shí)間字符串表示形式。
          ToShortDateString 將此實(shí)例的值轉(zhuǎn)換為其等效的短日期字符串表示形式。


          表02:DateTime結(jié)構(gòu)的常用方法及其說(shuō)明

          表03和表04分別是TimeSpan結(jié)構(gòu)的常用屬性和常用方法及其說(shuō)明:
          屬性 說(shuō)明
          Days 獲取由此實(shí)例表示的整天數(shù)。
          Hours 獲取由此實(shí)例表示的整小時(shí)數(shù)。
          Milliseconds 獲取由此實(shí)例表示的整毫秒數(shù)。
          Minutes 獲取由此實(shí)例表示的整分鐘數(shù)。
          Seconds 獲取由此實(shí)例表示的整秒數(shù)。
          Ticks 獲取用刻度表示的此實(shí)例的值。
          TotalDays 獲取以整天數(shù)和天的小數(shù)部分表示的此實(shí)例的值。
          TotalHours 獲取以整小時(shí)數(shù)和小時(shí)的小數(shù)部分表示的此實(shí)例的值。
          TotalMilliseconds 獲取以整毫秒數(shù)和毫秒的小數(shù)部分表示的此實(shí)例的值。
          TotalMinutes 獲取以整分鐘數(shù)和分鐘的小數(shù)部分表示的此實(shí)例的值。
          TotalSeconds 獲取以整秒數(shù)和秒的小數(shù)部分表示的此實(shí)例的值。

          表03:TimeSpan結(jié)構(gòu)的常用屬性及其說(shuō)明
          方法 說(shuō)明
          Add 將指定的TimeSpan添加到此實(shí)例中。
          Duration 返回其值為此實(shí)例的絕對(duì)值的TimeSpan。
          FromDays 返回表示指定天數(shù)的TimeSpan,其中對(duì)天數(shù)的指定精確到最接近的毫秒。
          FromHours 返回表示指定小時(shí)數(shù)的TimeSpan,其中對(duì)小時(shí)數(shù)的指定精確到最接近的毫秒。
          FromMilliseconds 返回表示指定毫秒數(shù)的TimeSpan。
          FromMinutes 返回表示指定分鐘數(shù)的TimeSpan,其中對(duì)分鐘數(shù)的指定精確到最接近的毫秒。
          FromSeconds 返回表示指定秒數(shù)的TimeSpan,其中對(duì)秒數(shù)的指定精確到最接近的毫秒。
          Subtract 從此實(shí)例中減去指定的TimeSpan。

          表04:TimeSpan結(jié)構(gòu)的常用方法及其說(shuō)明

          posted on 2012-05-02 12:33 SkyDream 閱讀(54187) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): C# WinForm

          <2012年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(3)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 商城县| 临邑县| 栾城县| 白朗县| 旬邑县| 新宾| 无棣县| 宜章县| 玉树县| 阿合奇县| 海阳市| 扶沟县| 新化县| 巴南区| 连南| 沙坪坝区| 田林县| 错那县| 大姚县| 河源市| 临海市| 黄浦区| 新泰市| 阜新市| 特克斯县| 新田县| 鄂温| 镇雄县| 邯郸市| 茌平县| 崇信县| 新余市| 子长县| 栾城县| 天等县| 富宁县| 玛沁县| 龙胜| 靖边县| 灵丘县| 萝北县|