详解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值表示的秒数。
代码实例
timespan ts = new timespan(12, 12, 11, 12, 21); int days = new timespan(12, 12, 11, 12, 21).days; timespan duration = new timespan(-12, 12, 11, 12, 21).duration();//24小时的反值 double totaldays = new timespan(12, 12, 11, 12, 21).totaldays; double totalhours = new timespan(2, 12, 11, 12, 21).totalhours; int hours = new timespan(12, 12, 11, 12, 21).hours; int minutes = new timespan(12, 12, 11, 12, 21).minutes; timespan ts2 = new timespan(1, 3, 01, 12, 21); // timespan ts2 = new timespan(5, 3, 1, 12, 21);//this is also right timespan ts3 = new timespan(5, 3, 01, 12, 21).add(ts); timespan ts4 = new timespan(4, 3, 01, 12, 21).subtract(ts); timespan ts5 = new timespan(4, 3, 01, 12, 21).subtract(ts).duration(); timespan negate = new timespan(5, 3, 01, 12, 21).negate(); datetime dtnow = datetime.now; console.writeline(ts); console.writeline(days); console.writeline(duration); console.writeline(totaldays); console.writeline(totalhours); console.writeline(hours); console.writeline(minutes); console.writeline(ts2); console.writeline(ts+ts2); console.writeline(ts3); console.writeline("subtract:"+ts4); console.writeline("duration:" + ts5); console.writeline(ts - ts2); console.writeline(negate); datetime span = datetime.now.add(ts2); timespan spdate = span - datetime.now; long dateticks = datetime.now.add(ts2).ticks; console.writeline(span); console.writeline(spdate); console.writeline(dateticks);
负数
上面是较晚的日期减较早的日期,所以各属性值为正数,如果是较早的日期减较晚的日期,则属性值为负数。
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 将此实例的值转换为其等效的短日期字符串表示形式。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: SqlServer 数据库 三大 范式