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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/3/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算2个时间之间经过多少Ticks 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Ticks是一個(gè)周期,存儲(chǔ)的是一百納秒,換算為秒,一千萬分之一秒。
我們需要計(jì)算2個(gè)時(shí)間之間,經(jīng)過多少Ticks,可以使用下面的方法來實(shí)現(xiàn),使用2個(gè)時(shí)間相減。

得到結(jié)果為正數(shù),是使用較晚的時(shí)間減去較早的時(shí)間。反之為負(fù)數(shù),即是使用較早的時(shí)間減去較晚的時(shí)間。

創(chuàng)建一個(gè)對(duì)象:

?

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


在控制臺(tái)應(yīng)用程序運(yùn)行上面寫好的程序:



?
現(xiàn)在來了,實(shí)際情況并非都是計(jì)算2個(gè)時(shí)間之間的Ticks,而是有可能需要計(jì)算2個(gè)時(shí)間之間的秒,分鐘,小時(shí),天等。
為了實(shí)現(xiàn)上面的要求,我們得了解一些基礎(chǔ)知識(shí):
1天= 24;
1小時(shí)= 60分鐘;
1分鐘= 60秒;
1秒=?10000000Ticks;

因此,根據(jù)上面的計(jì)算結(jié)果(Ticks)和公式可以計(jì)算出2個(gè)時(shí)間之間的秒,分鐘,小時(shí),天等。

我們?cè)陬悇e中,添加下面4個(gè)方法:



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

?

方法寫完,在控制臺(tái)測(cè)試一下上面的方法:

?

?上面的計(jì)算方法有點(diǎn)原始,MSDN已經(jīng)給出相應(yīng)的方法,就可以計(jì)算出2個(gè)時(shí)間之間的秒,分鐘,小時(shí),天等。如:
TotalSeconds(),TotalMinutes(),TotalHours(),TotalDays();
為了演示與測(cè)試,Insus.NET再創(chuàng)建另外4個(gè)方法:



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

?

?

再運(yùn)行程序:

?


最后的現(xiàn)成的方法,它已經(jīng)封裝好單位轉(zhuǎn)換與公式計(jì)算。

細(xì)心的用戶有可以發(fā)現(xiàn),2種結(jié)果有些不相同,沒有小數(shù)和有小數(shù)。其實(shí)可以解決的,把一千萬分之一秒這個(gè)基數(shù)轉(zhuǎn)換為double數(shù)據(jù)類型即可。也就是說把能來的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

?

這次,我們?cè)俅芜\(yùn)行程序,看看結(jié)果是否與自帶的方法計(jì)算的結(jié)果相同:


OK,就這樣子,你可以使用自帶現(xiàn)成的方法,可以自己寫。

寫到這里應(yīng)該是結(jié)果了,但是回過頭來看看自己寫的代碼,有一句:

TimeSpan ts = (_EndDate - _StartDate).Duration();


每一個(gè)方法里均有,代碼冗余了,我們可以簡(jiǎn)化它,寫一個(gè)方法或是屬性:


public TimeSpan Ts{get{return (_EndDate - _StartDate).Duration();}}public long Ticks{get{return Ts.Ticks;}} Source Code

?

經(jīng)過一次重構(gòu),8個(gè)方法里,只需要一句代碼就行了:

?

總結(jié)

以上是生活随笔為你收集整理的计算2个时间之间经过多少Ticks的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。