生活随笔
收集整理的這篇文章主要介紹了
计算2个时间之间经过多少Ticks
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Ticks是一個周期,存儲的是一百納秒,換算為秒,一千萬分之一秒。
我們需要計算2個時間之間,經過多少Ticks,可以使用下面的方法來實現,使用2個時間相減。
得到結果為正數,是使用較晚的時間減去較早的時間。反之為負數,即是使用較早的時間減去較晚的時間。
創(chuàng)建一個對象:
?
class Ag{private DateTime _StartDate;public DateTime StartDate{get {
return _StartDate; }set { _StartDate =
value; }}private DateTime _EndDate;public DateTime EndDate{get {
return _EndDate; }set { _EndDate =
value; }}public Ag(DateTime startDate, DateTime endDate){this._StartDate =
startDate;this._EndDate =
endDate;}public void DurationTicks(){ TimeSpan ts = (_EndDate -
_StartDate).Duration();Console.WriteLine(ts.Ticks);}} Source Code
在控制臺應用程序運行上面寫好的程序:
?
現在來了,實際情況并非都是計算2個時間之間的Ticks,而是有可能需要計算2個時間之間的秒,分鐘,小時,天等。
為了實現上面的要求,我們得了解一些基礎知識:
1天= 24;
1小時= 60分鐘;
1分鐘= 60秒;
1秒=?10000000Ticks;
因此,根據上面的計算結果(Ticks)和公式可以計算出2個時間之間的秒,分鐘,小時,天等。
我們在類別中,添加下面4個方法:
public void DurationSeconds(){TimeSpan ts = (_EndDate -
_StartDate).Duration();Console.WriteLine("Duraction Seconds: {0}", ts.Ticks /
10000000L);}public void DurationMinutes(){TimeSpan ts = (_EndDate -
_StartDate).Duration();Console.WriteLine("Duraction Minutes: {0}",ts.Ticks / (
10000000L *
60));}public void DurationHours(){TimeSpan ts = (_EndDate -
_StartDate).Duration();Console.WriteLine("Duraction Hours: {0}", ts.Ticks / (
10000000L *
60 *
60));}public void DurationDays(){TimeSpan ts = (_EndDate -
_StartDate).Duration();Console.WriteLine("Duraction Days: {0}", ts.Ticks / (
10000000L *
60 *
60 *
24));} Source Code ?
方法寫完,在控制臺測試一下上面的方法:
?
?上面的計算方法有點原始,MSDN已經給出相應的方法,就可以計算出2個時間之間的秒,分鐘,小時,天等。如:
TotalSeconds(),TotalMinutes(),TotalHours(),TotalDays();
為了演示與測試,Insus.NET再創(chuàng)建另外4個方法:
public void TotalSeconds(){TimeSpan ts = (_EndDate -
_StartDate).Duration();Console.WriteLine("Duraction Seconds: {0}", ts.TotalSeconds);}public void TotalMinutes(){TimeSpan ts = (_EndDate -
_StartDate).Duration();Console.WriteLine("Duraction Minutes: {0}", ts.TotalMinutes);}public void TotalHours(){TimeSpan ts = (_EndDate -
_StartDate).Duration();Console.WriteLine("Duraction Hours: {0}", ts.TotalHours);}public void TotalDays(){TimeSpan ts = (_EndDate -
_StartDate).Duration();Console.WriteLine("Duraction Days: {0}", ts.TotalDays);} Source Code ?
?
再運行程序:
?
最后的現成的方法,它已經封裝好單位轉換與公式計算。
細心的用戶有可以發(fā)現,2種結果有些不相同,沒有小數和有小數。其實可以解決的,把一千萬分之一秒這個基數轉換為double數據類型即可。也就是說把能來的L-->D:
public void DurationSeconds(){TimeSpan ts = (_EndDate -
_StartDate).Duration();// Console.WriteLine("Duraction Seconds: {0}", ts.Ticks / 10000000L);Console.WriteLine(
"Duraction Seconds: {0}", ts.Ticks /
10000000D);}public void DurationMinutes(){TimeSpan ts = (_EndDate -
_StartDate).Duration();// Console.WriteLine("Duraction Minutes: {0}", ts.Ticks / (10000000L * 60));Console.WriteLine(
"Duraction Minutes: {0}", ts.Ticks / (10000000D *
60));}public void DurationHours(){TimeSpan ts = (_EndDate -
_StartDate).Duration();// Console.WriteLine("Duraction Hours: {0}", ts.Ticks / (10000000L * 60 * 60)); Console.WriteLine(
"Duraction Hours: {0}", ts.Ticks / (10000000D *
60 *
60));}public void DurationDays(){TimeSpan ts = (_EndDate -
_StartDate).Duration();// Console.WriteLine("Duraction Days: {0}", ts.Ticks / (10000000L * 60 * 60 * 24)); Console.WriteLine(
"Duraction Days: {0}", ts.Ticks / (10000000D *
60 *
60 *
24));} Source Code ?
這次,我們再次運行程序,看看結果是否與自帶的方法計算的結果相同:
OK,就這樣子,你可以使用自帶現成的方法,可以自己寫。
寫到這里應該是結果了,但是回過頭來看看自己寫的代碼,有一句:
TimeSpan ts = (_EndDate - _StartDate).Duration();
每一個方法里均有,代碼冗余了,我們可以簡化它,寫一個方法或是屬性:
public TimeSpan Ts{get{return (_EndDate -
_StartDate).Duration();}}public long Ticks{get{return Ts.Ticks;}} Source Code ?
經過一次重構,8個方法里,只需要一句代碼就行了:
?
總結
以上是生活随笔為你收集整理的计算2个时间之间经过多少Ticks的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。