詳解C# TimeSpan 計算時間差(時間距離)。本站提示廣大學習愛好者:(詳解C# TimeSpan 計算時間差(時間距離))文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C# TimeSpan 計算時間差(時間距離)正文
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值表示的秒數。代碼實例
TimeSpan ts = new TimeSpan(12, 12, 11, 12, 21); int days = new TimeSpan(12, 12, 11, 12, 21).Days; TimeSpan duration = new TimeSpan(-12, 12, 11, 12, 21).Duration();//24小時的反值 double totalDays = new TimeSpan(12, 12, 11, 12, 21).TotalDays; double totalHours = new TimeSpan(2, 12, 11, 12, 21).TotalHours; int hours = new TimeSpan(12, 12, 11, 12, 21).Hours; int minutes = new TimeSpan(12, 12, 11, 12, 21).Minutes; TimeSpan ts2 = new TimeSpan(1, 3, 01, 12, 21); // TimeSpan ts2 = new TimeSpan(5, 3, 1, 12, 21);//this is also right TimeSpan ts3 = new TimeSpan(5, 3, 01, 12, 21).Add(ts); TimeSpan ts4 = new TimeSpan(4, 3, 01, 12, 21).Subtract(ts); TimeSpan ts5 = new TimeSpan(4, 3, 01, 12, 21).Subtract(ts).Duration(); TimeSpan Negate = new TimeSpan(5, 3, 01, 12, 21).Negate(); DateTime dtnow = DateTime.Now; Console.WriteLine(ts); Console.WriteLine(days); Console.WriteLine(duration); Console.WriteLine(totalDays); Console.WriteLine(totalHours); Console.WriteLine(hours); Console.WriteLine(minutes); Console.WriteLine(ts2); Console.WriteLine(ts+ts2); Console.WriteLine(ts3); Console.WriteLine("Subtract:"+ts4); Console.WriteLine("Duration:" + ts5); Console.WriteLine(ts - ts2); Console.WriteLine(Negate); DateTime span = DateTime.Now.Add(ts2); TimeSpan spdate = span - DateTime.Now; long dateTicks = DateTime.Now.Add(ts2).Ticks; Console.WriteLine(span); Console.WriteLine(spdate); Console.WriteLine(dateTicks);
正數
下面是較晚的日期減較早的日期,所以各屬性值為負數,假如是較早的日期減較晚的日期,則屬性值為正數。
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 將此實例的值轉換為其等效的短日期字符串表示方式。以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支持。