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

Ticks是一个周期,存储的是一百纳秒,换算为秒,一千万分之一秒。
我们需要计算2个时间之间,经过多少Ticks,可以使用下面的方法来实现,使用2个时间相减。

得到结果为正数,是使用较晚的时间减去较早的时间。反之为负数,即是使用较早的时间减去较晚的时间。

创建一个对象:

 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再创建另外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

再运行程序:

最后的现成的方法,它已经封装好单位转换与公式计算。

细心的用户有可以发现,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个方法里,只需要一句代码就行了:

时间: 2024-10-09 19:57:47

计算2个时间之间经过多少Ticks的相关文章

js实现的计算两个时间之间的时间差

js实现的计算两个时间之间的时间差:在实际应用中,需要计算两个时间点之间的差距,一般来说都是计算当前时间和一个指定时间点之间的差距,并且有时候需要精确到天.小时.分钟和秒,下面就简单介绍一下如何实现此效果.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.

MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数

MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数 计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数,这里主要分享的是通过MySql内置的函数 TimeStampDiff() 实现. 函数 TimeStampDiff() 是MySQL本身提供的可以计算两个时间间隔的函数,语法为: TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2) 返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之

计算两个时间之间的天数

1第一种 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Test { public static void main(String[] args) { try { //时间转换类 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM

iOS 计算两个时间之间的差

NSDateFormatter *date=[[NSDateFormatter alloc] init]; [date setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSCalendar *cal=[NSCalendar currentCalendar]; unsigned int unitFlags=NSYearCalendarUnit| NSMonthCalendarUnit| NSDayCalendarUnit|NSHourCalendarUnit

计算两个时间之间相差了多少时间

Date的话如下 int minutes = (int) ((date2.getTime() - date.getTime())/(1000 * 60)); 其他单位改改算法就行了 如果是时间戳的话,直接减就行了-- 原文地址:https://www.cnblogs.com/IceBlueBrother/p/8423141.html

sql计算两个时间之间的差,并用时分秒表示

这是自己写的方法,总觉得会有更好的办法实现这个效果呢? SELECT case when CONVERT(nvarchar,DATEDIFF(SECOND,FinishAt,getdate() ))>86400 then CONVERT(nvarchar, DATEDIFF(SECOND,FinishAt,getdate() )/86400)+'天'+CONVERT(nvarchar, DATEDIFF(SECOND,FinishAt,getdate() )%86400/3600)+'时'+CO

PHP 计算两个时间戳之间相差的时间

//功能:计算两个时间戳之间相差的日时分秒 //$begin_time 开始时间戳 //$end_time 结束时间戳 function timediff($begin_time,$end_time) { if($begin_time < $end_time){ $starttime = $begin_time; $endtime = $end_time; }else{ $starttime = $end_time; $endtime = $begin_time; } //计算天数 $timed

计算两个时间戳之间相差的时间

代码如下 //功能:计算两个时间戳之间相差的日时分秒 //$begin_time 开始时间戳 //$end_time 结束时间戳 function timediff($begin_time,$end_time) { if($begin_time < $end_time){ $starttime = $begin_time; $endtime = $end_time; }else{ $starttime = $end_time; $endtime = $begin_time; } //计算天数 $

java计算两个日期之间相隔的天数

1 import java.text.ParseException; 2 import java.text.SimpleDateFormat; 3 import java.util.Calendar; 4 import java.util.Date; 5 6 7 public class date { 8 9 /** 10 * @param args 11 * @throws ParseException 12 */ 13 public static void main(String[] arg