详解C# TimeSpan 计算时间差(时间间隔)

时间:2021-09-21 03:50:30

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值表示的秒数。

代码实例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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);

详解C# 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。

以下提供一些常用的方法

求离最近发表时间的函数

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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计算两个时间的差值

可以反加两个日期之间任何一个时间单位。

?
1
2
3
4
5
6
7
8
9
10
11
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/// <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 将此实例的值转换为其等效的短日期字符串表示形式。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://www.cnblogs.com/qinpengming/p/3265579.html