日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算2个时间之间经过多少Ticks

發(fā)布時間:2025/3/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。