1. 程式人生 > >[轉載]C# TimeSpan 計算時間差(時間間隔)

[轉載]C# TimeSpan 計算時間差(時間間隔)

形式 string 當前 bubuko 閏年 tro 常用 時間日期 列表

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

代碼實例

技術分享圖片 View Code

技術分享圖片

負數

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

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);

返回分鐘時間

[轉載]C# TimeSpan 計算時間差(時間間隔)