您現在的位置: 365建站網 > 365學習 > C#里如何使用Timespan計時或計算時間差

C#里如何使用Timespan計時或計算時間差

文章來源:365jz.com     點擊數:462    更新時間:2018-06-04 13:11   參與評論

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

命名空間:System 程序集:mscorlib(在 mscorlib.dll 中)

說明: 1.DateTime值類型代表了一個從公元0001年1月1日0點0分0秒到公元9999年12月31日23點59分59秒之間的具體日期時刻。因此,你可以用DateTime值類型來描述任何在想象范圍之內的時間。TimeSpan值包含了許多屬性與方法,用于訪問或處理一個TimeSpan值,

其中的五個重載方法之一的結構 TimeSpan( int days, int hours, int minutes, int seconds )

下面的列表涵蓋了其中的一部分方法及屬性解釋

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值表示的秒數。


負數

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

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。

以下提供一些常用的方法

求離最近發表時間的函數
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

比如1天12小時結果就是1.5

int nDays = ts.Days;//整數天數,1天12小時或者1天20小時結果都是1

/// <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;
}

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

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

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

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

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

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

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

DateTime結構和TimeSpan結構提供了豐富的方法和屬性,

屬性 說明
Date 獲取此實例的日期部分。
Day 獲取此實例所表示的日期為該月中的第幾天。
DayOfWeek 獲取此實例所表示的日期是星期幾。
DayOfYear 獲取此實例所表示的日期是該年中的第幾天。
Hour 獲取此實例所表示日期的小時部分。
Millisecond 獲取此實例所表示日期的毫秒部分。
Minute 獲取此實例所表示日期的分鐘部分。
Month 獲取此實例所表示日期的月份部分。
Now 創建一個DateTime實例,它是此計算機上的當前本地日期和時間。
Second 獲取此實例所表示日期的秒部分。
TimeOfDay 獲取此實例的當天的時間。
Today 獲取當前日期。
Year 獲取此實例所表示日期的年份部分。

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

 

 

簡單的后臺計算

TimeSpan ts = Convert.ToDateTime("2016 - 12 - 13 17:09:47.223") - Convert.ToDateTime("2016 - 12 - 13 13:36:10.023");

int spend_time = Convert.ToInt32(ts.TotalMinutes);

返回分鐘時間


eg1.

  DateTime   dt1   =   DateTime.Now;   
  DateTime   dt2   =   DateTime.Now.AddDays(-7);   
  TimeSpan   ts   =   dt1   -   dt2;      
  int   days   =   ts.Days;   //dt1和dt2相差多少天



eg2.

     //編輯月份和系統登錄月份是否相等
     if(Convert.ToDateTime(DateTime.Now.ToShortDateString()).Month==Convert.ToDateTime(this.GetQueryString("sdate")).Month)
     {
      TimeSpan  ts=Convert.ToDateTime(DateTime.Now.ToShortDateString())-Convert.ToDateTime(this.GetQueryString("sdate"));
      iDays=ts.Days;
      //登錄系統的前三天可以編輯
      if(iDays<4)
      {
       Submiter submit = new Submiter(this,"tt");
       this.iseretail.SelectedValue=this.GetQueryString("rid");
       this.txtTime.Text=this.GetQueryString("sdate").ToString();
       this.InputSelect1.WhereCondition=" gxlshd='"+this.GetQueryString("rid")+"'";
       if(this.GetQueryString("workid")!="")
        this.InputSelect1.SelectedValue=this.GetQueryString("workid");
       submit.InitInsertMode();
       SetDataGrid();
      }


eg3.C#中計算兩個時間的差


        /// 計算兩個日期的時間間隔
        /// </summary>
        /// <param name="DateTime1">第一個日期和時間</param>
        /// <param name="DateTime2">第二個日期和時間</param>
        /// <returns></returns>
        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;
        }


說明:

1.DateTime值類型代表了一個從公元0001年1月1日0點0分0秒到公元9999年12月31日23點59分59秒之間的具體日期時刻。因此,你可以用DateTime值類型來描述任何在想象范圍之內的時間。一個DateTime值代表了一個具體的時刻
2.TimeSpan值包含了許多屬性與方法,用于訪問或處理一個TimeSpan值


如對本文有疑問,請提交到交流論壇,廣大熱心網友會為你解答??! 點擊進入論壇


發表評論 (462人查看,0條評論)
請自覺遵守互聯網相關的政策法規,嚴禁發布色情、暴力、反動的言論。
用戶名: 驗證碼: 點擊我更換圖片
最新評論
------分隔線----------------------------
自拍偷拍福力视频,偷拍国际精品,麻豆一区福利电影,国产网红视频午夜福利,se视频大全,久久国产AV影院 日本羞羞的视频在线播放| 人人爽天天碰狠狠添| 翁熄乱叫| 免费的美女色视频网站| 一本到国内在线视频观看| 这里只有精品22在线播放| 波多野结衣Av高清| 成人免费午a大片| 男女猛烈无遮挡免费视频| 午夜电影| 日本真人试看120秒做受| 中文字幕人妻伦伦在线播放| 久久99精品久久久久久蜜芽| 翁公的粗大挺进晓静的密| 在线观看无码av网址| 午夜嘿嘿嘿影院| 电影一本道AV免费高清| 无码在线超碰| 高潮还不拔出正在播放亚洲欧洲中文日韩乱码AV| ⅵdeodesetv性欧美| 人妻卧室迎合领导进入| 中文字幕不卡手在线观看| 国产a在线不卡| 丫头别动我还在里面要断了| 日本在线视频网站www色| 国产在沙发上午睡被强| 第一次处破女08俄罗斯123| 永久黄网站色视频免费app| chinese国产老太性| 观看oldmygranny| 满床春水BD| http://www.site4funs.com