[转载]C# TimeSpan 计算时间差(时间间隔)
TimeSpan 结构 表示一个时间间隔。
命名空间:System 程序集:mscorlib(在 mscorlib.dll 中)
说明: 1.DateTime值类型代表了一个从公元0001年1月1日0点0分0秒到公元9999年12月31日23点59分59秒之间的具体日期时刻。因此,你可以用DateTime值类型来描述任何在想象范围之内的时间。TimeSpan值包含了许多属性与方法,用于访问或处理一个TimeSpan值,
其中的五个重载方法之一的结构 TimeSpan( int days, int hours, int minutes, int seconds )
下面的列表涵盖了其中的一部分方法及属性解释
Add:与另一个TimeSpan值相加。
Days:返回用天数计算的TimeSpan值。
Duration:获取TimeSpan的绝对值。
Hours:返回用小时计算的TimeSpan值
Milliseconds:返回用毫秒计算的TimeSpan值。
Minutes:返回用分钟计算的TimeSpan值。
Negate:返回当前实例的相反数。
Seconds:返回用秒计算的TimeSpan值。
Subtract:从中减去另一个TimeSpan值。
Ticks:返回TimeSpan值的tick数。
TotalDays:返回TimeSpan值表示的天数。
TotalHours:返回TimeSpan值表示的小时数。
TotalMilliseconds:返回TimeSpan值表示的毫秒数。
TotalMinutes:返回TimeSpan值表示的分钟数。
TotalSeconds:返回TimeSpan值表示的秒数。
代码实例

负数
上面是较晚的日期减较早的日期,所以各属性值为正数,如果是较早的日期减较晚的日期,则属性值为负数。
ASP.NET 中,两个时间相减,得到一个 TimeSpan 实例,TimeSpan 有一些属性:Days、TotalDays、Hours、TotalHours、Minutes、TotalMinutes、Seconds、TotalSeconds、Ticks,注意没有 TotalTicks。
举例说明
•时间 1 是 2010-1-2 8:43:35;
时间 2 是 2010-1-12 8:43:34。
用时间 2 减时间 1,得到一个 TimeSpan 实例。
那么时间 2 比时间 1 多 9 天 23 小时 59 分 59 秒。
那么,Days 就是 9,Hours 就是 23,Minutes 就是 59,Seconds 就是 59。
再来看 Ticks,Tick 是一个计时周期,表示一百纳秒,即一千万分之一秒,那么 Ticks 在这里表示总共相差多少个时间周期,即:9 * 24 * 3600 * 10000000 + 23 * 3600 * 10000000 +59 * 60 * 10000000 + 59 * 10000000 = 8639990000000。3600 是一小时的秒数。
TotalDays 就是把 Ticks 换算成日数,即:8639990000000 / (10000000 * 24 * 3600) = 9.99998842592593。
TotalHours 就是把 Ticks 换算成小时数,即:8639990000000 / (10000000 * 3600) = 239.999722222222。
TotalMinutes 就是把 Ticks 换算成分钟数,即:8639990000000 / (10000000 * 60) = 14399.9833333333。
TotalSeconds 就是把 Ticks 换算成秒数,即:8639990000000 / (10000000) = 863999。
以下提供一些常用的方法
求离最近发表时间的函数
public string DateStringFromNow(DateTime dt)
{
TimeSpan
span = DateTime.Now - dt;
if (span.TotalDays > 60)
{
return
dt.ToShortDateString();
}
else if ( span.TotalDays > 30 )
{
return "1个月前";
}
else if (span.TotalDays > 14)
{
return
"2周前";
}
else if (span.TotalDays > 7)
{
return "1周前";
}
else if (span.TotalDays > 1)
{
return string.Format("{0}天前",
(int)Math.Floor(span.TotalDays));
}
else if (span.TotalHours > 1)
{
return string.Format("{0}小时前", (int)Math.Floor(span.TotalHours));
}
else if (span.TotalMinutes > 1)
{
return string.Format("{0}分钟前", (int)Math.Floor(span.TotalMinutes));
}
else if (span.TotalSeconds >= 1)
{
return string.Format("{0}秒前",
(int)Math.Floor(span.TotalSeconds));
}
else {
return "1秒前";
}
}
C#中使用TimeSpan计算两个时间的差值
可以反加两个日期之间任何一个时间单位。
private string DateDiff(DateTime DateTime1, DateTime DateTime2)
{string dateDiff = null;
TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
TimeSpan ts2 = new
TimeSpan(DateTime2.Ticks);
TimeSpan ts = ts1.Subtract(ts2).Duration();
dateDiff = ts.Days.ToString()+"天"+ ts.Hours.ToString()+"小时"+ ts.Minutes.ToString()+"分钟"+ ts.Seconds.ToString()+"秒";
return dateDiff;
}
TimeSpan ts = Date1 - Date2;
double dDays = ts.TotalDays;//带小数的天数,比如1天12小时结果就是1.5
比如1天12小时结果就是1.5
int nDays = ts.Days;//整数天数,1天12小时或者1天20小时结果都是1
/// <summary>
/// 日期比较
/// </summary>
/// <param name="today">当前日期</param>
/// <param name="writeDate">输入日期</param>
/// <param name="n">比较天数</param>
<returns>大于天数返回true,小于返回false</returns>
private bool CompareDate(string today, string writeDate, int n)
{
DateTime Today = Convert.ToDateTime(today);
DateTime WriteDate = Convert.ToDateTime(writeDate);
WriteDate = WriteDate.AddDays(n);
if (Today>= WriteDate)
return false;
else
return true;
}
在定义Date数据类型时候,必须注意下面三点:
1. Date数值必须以数字符号"#"括起来。
2. Date数值中的日期数据可有可无,如果有必须符合格式"m/d/yyyy"。
3. Date数值中的时间数据可有可无,如果有必须和日期数据通过空格分开,并且时分秒之间以":"分开。
一.DateTime和TimeSpan的关系和区别:
DateTime和TimeSpan是Visual Basic .Net中用以处理时间日期类型数据的二个主要的结构,这二者的区别在于,DatTime表示一个固定的时间,而TimeSpan表示的是一个时间间隔, 即一段时间。在下面介绍的程序示例中,TimeSpan就用以当前时间和给定时间之差。
二.DateTime和TimeSpan中的常用成员及其说明:
DateTime结构和TimeSpan结构提供了丰富的方法和属性,
属性 说明
Date 获取此实例的日期部分。
Day 获取此实例所表示的日期为该月中的第几天。
DayOfWeek 获取此实例所表示的日期是星期几。
DayOfYear 获取此实例所表示的日期是该年中的第几天。
Hour 获取此实例所表示日期的小时部分。
Millisecond 获取此实例所表示日期的毫秒部分。
Minute 获取此实例所表示日期的分钟部分。
Month 获取此实例所表示日期的月份部分。
Now 创建一个DateTime实例,它是此计算机上的当前本地日期和时间。
Second 获取此实例所表示日期的秒部分。
TimeOfDay 获取此实例的当天的时间。
Today 获取当前日期。
Year 获取此实例所表示日期的年份部分。
Add 将指定的TimeSpan的值加到此实例的值上。
AddDays 将指定的天数加到此实例的值上。
AddHours 将指定的小时数加到此实例的值上。
AddMilliseconds 将指定的毫秒数加到此实例的值上。
AddMinutes 将指定的分钟数加到此实例的值上。
AddMonths 将指定的月份数加到此实例的值上。
AddSeconds 将指定的秒数加到此实例的值上。
AddYears 将指定的年份数加到此实例的值上。
DaysInMonth 返回指定年份中指定月份的天数。
IsLeapYear 返回指定的年份是否为闰年的指示。
Parse 将日期和时间的指定字符串表示转换成其等效的DateTime实例。
Subtract 从此实例中减去指定的时间或持续时间。
ToLongDateString 将此实例的值转换为其等效的长日期字符串表示形式。
ToLongTimeString 将此实例的值转换为其等效的长时间字符串表示形式。
ToShortTimeString 将此实例的值转换为其等效的短时间字符串表示形式。
ToShortDateString 将此实例的值转换为其等效的短日期字符串表示形式。
简单的后台计算
TimeSpan ts = Convert.ToDateTime("2016 - 12 - 13 17:09:47.223") - Convert.ToDateTime("2016 - 12 - 13 13:36:10.023");
int spend_time = Convert.ToInt32(ts.TotalMinutes);
返回分钟时间
[转载]C# TimeSpan 计算时间差(时间间隔)的更多相关文章
- C# TimeSpan 计算时间差(时间间隔)
命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) 说明: 1.DateTime值类型代表了一个从公元0001年1月1日0点0分0秒到公元9999年12月31日23点 ...
- C# 计算时间差 用timespan函数
TimeSpan 结构 表示一个时间间隔. 命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) 1.DateTime值类型代表了一个从公元0001年1月1日0点0分 ...
- 【转载】c/c++在windows下获取时间和计算时间差的几种方法总结
一.标准C和C++都可用 1.获取时间用time_t time( time_t * timer ),计算时间差使用double difftime( time_t timer1, time_t time ...
- 问题:C#时间差;结果:C# 使用TimeSpan计算两个时间差
C# 使用TimeSpan计算两个时间差 可以加两个日期之间任何一个时间单位. private string DateDiff(DateTime DateTime1, DateTime DateTim ...
- C#计算时间差值
/// <summary> /// 计算时间差值 /// </summary> /// <param name="DateTime1">< ...
- 使用DateAdd方法向指定日期添加一段时间间隔,使用TimeSpan对象获取时间间隔
一:使用DateAdd方法向指定日期添加一段时间间隔,截图 二:代码 using System; using System.Collections.Generic; using System.Comp ...
- Android中计算时间差的实现方法
今天为“至简天气”增加了一项功能:在启动时根据上次更新数据的时间判断是否有必要更新数据,因为 weather.com.cn 的实况数据貌似是25分钟才会刷新一次,只有在据上次更新的时间达25分钟以上才 ...
- asp.net中C#中计算时间差代码
我用的最简单的办法是 代码如下 复制代码 DateTime dtone = Convert.ToDateTime("2007-1-1 05:32:22");DateTime dtw ...
- c/c++在windows下获取时间和计算时间差的几种方法总结 【转】
http://blog.csdn.net/coder_xia/article/details/6566708 一.标准C和C++都可用 1.获取时间用time_t time( time_t * tim ...
随机推荐
- js以键值对的方式获取URL的参数
在前端日常的开发中,大多数时候我们只需用js获取到url中的参数即可,这个实现起来也很方便如: function getQueryString(value) { const reg = new Reg ...
- .node 文件require时候显示Error: The specified module could not be found
参考文章:https://stackoverflow.com/questions/41253450/error-the-specified-module-could-not-be-found 第一:你 ...
- UIAlertController中TextField的用法
这时候可以添加如下代码: [alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) { // 可以 ...
- 扫毒>>观后感
观后感 中学时期,甚至在小学时期,那个很懵懂的年龄, 看了什么电影,去了哪里,都要写观后感. 那个时候觉得观后感很玄学,为啥看的电影都一样,去的地方都一样, 为啥人家的观后感貌似说的真的有那么点道理, ...
- 20175320 2018-2019-2 《Java程序设计》第6周学习总结
20175320 2018-2019-2 <Java程序设计>第6周学习总结 教材学习内容总结 本周学习了教材的第七及第十章的内容.在这两章中介绍了接内部类与异常类以及输入.输出流,第七章 ...
- 一篇文章学懂Shell脚本,最简明的教程在这里
Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. Shell可以直接使用在win/Unix/Linux上面 ...
- Android的几种Manager
电话管理器TelephoneManager 第一个实例是获取网络和SIM卡信息:界面是一个列表,这里省略,Java代码如下: public class MainActivity extends Act ...
- AD模块电压采集电路
之前一直没搞明白模拟电压转换电路,不知道应该怎么计算转换电压,最近一个项目中用到几处模拟电压的采集,硬件是由其他同事设计的,转换公式也是他给的,记录一下: 24V电压采集: 公式:Vout = Vin ...
- Python_tkinter(3)_grid布局
Grid(网格)布局管理器,是Tkinter里面最灵活的几何管理布局器.注意:不要试图在一个主窗口中混合使用pack和grid. 1.简单的布局 from tkinter import * root ...
- python写算法中的栈
########### 栈的使用 ############### class StackFullError(Exception): pass class StackEmptyError(Excepti ...