计算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 * ));
} 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的更多相关文章
- MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数
MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数 计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数,这里主要分享的是通过MySql内置的函数 TimeStampDiff() ...
- oracle 计算两个时间之间的月份差,相差几个星期,相差多少天
相差多少天: sysdate-to_date('1991-01-01','YYYY-MM-DD'))<7 and (sysdate-to_date('1991=01=01','YYYY-MM ...
- js计算两个时间之间的间隔
计算时间间隔的方法有很多,这里只是一种方式,可以方法里直接传入两个时间,也可以传入两个字符串格式的时间,在方法里解析一下就ok,这个例子里不传入参数,直接在方法里随便写一个时间来演示一下 fun() ...
- sql计算两个时间之间的差,并用时分秒表示
这是自己写的方法,总觉得会有更好的办法实现这个效果呢? SELECT then ))))+'秒' then )))+'秒' then ))+'秒' else CONVERT(nvarchar,DATE ...
- mysql 计算两个时间之间有多少分钟
SELECT TIMESTAMPDIFF(MINUTE, (DATE_FORMAT('2015-08-12 10:38:00','%Y-%m-%d %H:%i')), (DATE_FORMAT('20 ...
- mysql计算两个日期之间的天数
MYSQL自带函数计算给定的两个日期的间隔天数 有两个途径可获得 1.利用TO_DAYS函数 select to_days(now()) - to_days('20120512') 2 ...
- PHP 计算两个时间戳之间相差的时间
//功能:计算两个时间戳之间相差的日时分秒 //$begin_time 开始时间戳 //$end_time 结束时间戳 function timediff($begin_time,$end_time) ...
- Python datetime库计算两个时间点之间的分钟(秒、天)数
计算两个时间点之间的分钟数 import datetime def minNums(startTime, endTime): '''计算两个时间点之间的分钟数''' # 处理格式,加上秒位 start ...
- java计算两个日期之间相隔的天数
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...
随机推荐
- python网络编程:socketserver的基本使用
本文内容: socketserver的介绍 socketserver的使用 socketserver的异步服务端 首发时间:2018-03-21 也可以使用socketserver来创建socket ...
- Python之groupby
# -*- coding: utf-8 -*-"""Created on Sat Jun 30 10:09:47 2018测试分组groupby@author: zhen ...
- python 之路初(一):pycharm 安装 和 环境配置 和 中文乱码问题
从健身和学习中我一体会到坚持的力量.想写写东西的想法已经好久了,就是不知道怎么开始.最近生活开始给我各种攻击和磨练,我从声嘶力竭到沉默到默默坚持自己,改变自己并总结告诉自己:少说多看,看破不说破,宁愿 ...
- fedora 28 安装 wine 运行 uTorrent 解决linux 端,pt 资源下载问题
fedora 28 仓库中,资源比较多.使用 wine 运行windows 程序,可以一定程度上解决软件跨平台问题. 搜索: Last metadata expiration check: :: ag ...
- 使用parted创建gpt大分区例子
[root@VM000000518 ~]# parted /dev/xvde GNU Parted 2.1 Using /dev/xvde Welcome to GNU Parted! Type 'h ...
- js计算两个日期的天数差值
js计算两个日期的天数差值 通过两个日期计算这两个日期之间的天数差值 /** * 计算天数差的函数,通用 * @param sDate1 * @param sDate2 * @returns {Num ...
- centos-7 虚拟机安装图形界面
centos-7 虚拟机安装图形界面 想到安装一个docker环境,于是拿出了以前装的虚拟机centos7,记得装完后,没进行任何配置(默认安装的是命令行界面). 配置网络 现有的虚拟机是没有办法联网 ...
- Vue、Vuex+Cookie 实现自动登陆 。
概述 1.自动登陆实现思路. 2.vuex + cookie 多标签页状态保持. 自动登陆的需求: 1.登陆时勾选自动登陆,退出登陆或登陆到期后再次登陆后自动填写表单(记住密码)或访问登陆页自动登陆. ...
- 解决Windows10或者其他版本Windows Update报错的问题
最近更新系统,发现报错0x80248014,系统版本为redstone2(创意者更新). 总结发现,只要是windows各个版本自动更新报错的,如0x80开头的一系列错误,都可以通过如下步骤解决: 手 ...
- [方法提炼] 获取Android设备序列号方法
通过这个方法可以检测设备是否连接成功,如果有一台或者多台设备,可以将所有设备序列号全部输出 # -*- coding:utf-8 -*- import os def attachDeviceList( ...