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 * ));
} public void DurationHours()
{
TimeSpan ts = (_EndDate - _StartDate).Duration();
Console.WriteLine("Duraction Hours: {0}", ts.Ticks / (10000000L * * ));
} public void DurationDays()
{
TimeSpan ts = (_EndDate - _StartDate).Duration();
Console.WriteLine("Duraction Days: {0}", ts.Ticks / (10000000L * * * ));
}

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 * ));
} 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 * * ));
} 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 * * * ));
}

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的更多相关文章

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

    MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数 计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数,这里主要分享的是通过MySql内置的函数 TimeStampDiff() ...

  2. oracle 计算两个时间之间的月份差,相差几个星期,相差多少天

    相差多少天:   sysdate-to_date('1991-01-01','YYYY-MM-DD'))<7 and (sysdate-to_date('1991=01=01','YYYY-MM ...

  3. js计算两个时间之间的间隔

    计算时间间隔的方法有很多,这里只是一种方式,可以方法里直接传入两个时间,也可以传入两个字符串格式的时间,在方法里解析一下就ok,这个例子里不传入参数,直接在方法里随便写一个时间来演示一下 fun() ...

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

    这是自己写的方法,总觉得会有更好的办法实现这个效果呢? SELECT then ))))+'秒' then )))+'秒' then ))+'秒' else CONVERT(nvarchar,DATE ...

  5. mysql 计算两个时间之间有多少分钟

    SELECT TIMESTAMPDIFF(MINUTE, (DATE_FORMAT('2015-08-12 10:38:00','%Y-%m-%d %H:%i')), (DATE_FORMAT('20 ...

  6. mysql计算两个日期之间的天数

    MYSQL自带函数计算给定的两个日期的间隔天数   有两个途径可获得   1.利用TO_DAYS函数   select to_days(now()) - to_days('20120512')   2 ...

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

    //功能:计算两个时间戳之间相差的日时分秒 //$begin_time 开始时间戳 //$end_time 结束时间戳 function timediff($begin_time,$end_time) ...

  8. Python datetime库计算两个时间点之间的分钟(秒、天)数

    计算两个时间点之间的分钟数 import datetime def minNums(startTime, endTime): '''计算两个时间点之间的分钟数''' # 处理格式,加上秒位 start ...

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

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

随机推荐

  1. python练习(-)

    简单的爬虫示例: import urllib.request #python2.x版本为urllib2url = 'http://www.douban.com/'webPage=urllib.requ ...

  2. loadrunner 脚本优化-关联设置

    脚本优化-关联设置 by:授客 QQ:1033553122 关联的原理 关联也属于一钟特殊的参数化.一般参数化的参数来源于一个文件.一个定义的table.通过sql写的一个结果集等,但关联所获得的参数 ...

  3. Django--数据库查询操作

    MySQL是几乎每一个项目都会使用的一个关系数据库,又因为它是开源免费的,所以很多企业都用它来作为自家后台的数据库. BAT这类大公司除外,它们的业务数据是以亿级别来讨论的,而MySQL的单表6000 ...

  4. JsonParseException:非法的unquoted字符((CTRL-CHAR,代码9)):必须被转义

     其它异常,Could not read document: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped  ...

  5. Django 使用模型的API

    进入项目目录 python3运行 import os os.environ['DJANGO_SETTINGS_MODULE']= '项目.settings' import django django. ...

  6. 洗礼灵魂,修炼python(48)--巩固篇—模块

    模块 其实前面都说过的,不过还是系统的再说一次,相信学到这,大部分都被搞忘了吧,所以再提一下,也为后面的博文做铺垫 1.什么是模块 在程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越 ...

  7. VSCode + PYQT5 + QtDesigner 环境搭建和测试

    目的:编写Python桌面应用程序. 备注:也可以选择VS2017+QtDesigner ,但更喜欢VSCode 第1步:安装PyQt5和PyQt5-tools pip3 install -i htt ...

  8. PHP 截取字符串乱码的解决方案

    今天遇到一个坑,左右调试坑的我一脸懵逼,当我们对一条字符串进行截取的时候,通常第一个想到的就是substr()函数了,但是如果是中文+数字的字符串的话,这时候使用substr进行截取就会出现乱码的问题 ...

  9. 函数重载(overload)

    重载的定义及特点 在同一个类中,允许存在一个以上的同名函数, 只要他们的参数个数或者参数类型不同(不仅指两个重载方法的参数类型不同,还指相同参数拥有不同的参数类型顺序)就构成重载. 重载只和参数列表有 ...

  10. Alpha版本 - 测试报告

    Alpha版本 - 测试报告 总体测试计划 前端 模块 子模块 测试项 预期结果 测试工具 执行人 登录/注册模块 无网络 提示无网异常 robolectric 陈龙江 登录 输入用户名/密码为空,点 ...