C# 計算時間差 用timespan函數

          TimeSpan 結構  表示一個時間間隔。

          命名空間:System

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

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

          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 初始化為指定的小時數、分鐘數和秒數。

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

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


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

          這些屬性名稱開始理解有些困難,但閱讀本文后,相應您一定茅塞頓開。

          舉例說明
          •時間 1 是 2010-1-2 8:43:35;
          •時間 2 是 2010-1-12 8:43:34。

          用時間 2 減時間 1,得到一個 TimeSpan 實例。

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

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

          再來看 Ticks,Tick 是一個計時周期,表示一百納秒,即一千萬分之一秒,那么 Ticks 在這里表示總共相差多少個時間周期,即:9 * 24 * 3600 * 10000000 + 23 * 3600 * 10000000 + 59 * 60 * 10000000 + 59 * 10000000 = 8639990000000。3600 是一小時的秒數。

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

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

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

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

          負數

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

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

          求離最近發表時間的函數
          public string DateStringFromNow(DateTime dt)
          {
          TimeSpan span = DateTime.Now - dt;
          if (span.TotalDays > 60)
          {
          return dt.ToShortDateString();
          }
          else if ( span.TotalDays > 30 )
          {
          return "1個月前";
          }
          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}小時前", (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計算兩個時間的差值

          可以反加兩個日期之間任何一個時間單位。
          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()+"小時"+ ts.Minutes.ToString()+"分鐘"+ ts.Seconds.ToString()+"秒";
          return dateDiff;
          }


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


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


          /// <summary>
          /// 日期比較
          /// </summary>
          /// <param name="today">當前日期</param>
          /// <param name="writeDate">輸入日期</param>
          /// <param name="n">比較天數</param>
          /// <returns>大于天數返回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>(責任編輯:麥田守望者)



          在定義Date數據類型時候,必須注意下面三點:

          1. Date數值必須以數字符號"#"括起來。

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

          3. Date數值中的時間數據可有可無,如果有必須和日期數據通過空格分開,并且時分秒之間以":"分開。

          一.DateTime和TimeSpan的關系和區別:

          DateTime和TimeSpan是Visual Basic .Net中用以處理時間日期類型數據的二個主要的結構,這二者的區別在于,DatTime表示一個固定的時間,而TimeSpan表示的是一個時間間隔, 即一段時間。在下面介紹的程序示例中,TimeSpan就用以當前時間和給定時間之差。

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

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

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


          表02:DateTime結構的常用方法及其說明

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

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

          表04:TimeSpan結構的常用方法及其說明

          posted on 2012-05-02 12:33 SkyDream 閱讀(54173) 評論(0)  編輯  收藏 所屬分類: C# WinForm

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

          導航

          統計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 信阳市| 崇州市| 呈贡县| 瑞安市| 伊宁市| 诸暨市| 宁乡县| 宁南县| 叶城县| 台中市| 庆阳市| 渝北区| 临高县| 丹棱县| 福鼎市| 大石桥市| 屯留县| 额敏县| 柘荣县| 台中县| 资溪县| 太原市| 山阴县| 新乡县| 旬阳县| 舟山市| 综艺| 连城县| 牟定县| 昌江| 克什克腾旗| 穆棱市| 当阳市| 平昌县| 洛浦县| 吐鲁番市| 辽中县| 新乐市| 固安县| 太原市| 琼海市|