生活随笔
收集整理的這篇文章主要介紹了
计算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ò),歡迎將生活随笔推薦給好友。