编程知识 购物 网址 新闻 笑话 | 软件 日历 阅读 图书馆 China 头条阅读 学淘股 China Travel
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
   -> C# -> 计算2个时间之间经过多少Ticks -> 正文阅读

[C#]计算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个方法里,只需要一句代码就行了:


  C# 最新文章
字符串阵列分别输出元素的索引,原值和长度
格式化你的字符串
C#宣告一个变量
C#中级
拆分一个字符串并把每个字符单独输出
通过手机号定位归属地
C# DBNULL与NULL之间的区别【转】
Xamarin
List,DataTable实现行转列的通用方案
C# 语音识别
上一篇文章      下一篇文章      查看所有文章
加:2017-12-07 23:26:04  更:2017-12-07 23:26:23 
 
360图书馆 软件开发资料 购物精选 新闻资讯 Chinese Culture 三丰软件 开发 中国文化 阅读网 头条阅读 学淘股 China Travel 日历 万年历 2020年5日历
2020-5-31 4:20:59
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程知识