服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - 详解C# TimeSpan 计算时间差(时间间隔)

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

2021-12-15 13:07黎明&岁月 C#

本篇文章主要介绍了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值表示的秒数。

代码实例

?
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

延伸 · 阅读

精彩推荐
  • C#三十分钟快速掌握C# 6.0知识点

    三十分钟快速掌握C# 6.0知识点

    这篇文章主要介绍了C# 6.0的相关知识点,文中介绍的非常详细,通过这篇文字可以让大家在三十分钟内快速的掌握C# 6.0,需要的朋友可以参考借鉴,下面来...

    雨夜潇湘8272021-12-28
  • C#利用C#实现网络爬虫

    利用C#实现网络爬虫

    这篇文章主要介绍了利用C#实现网络爬虫,完整的介绍了C#实现网络爬虫详细过程,感兴趣的小伙伴们可以参考一下...

    C#教程网11852021-11-16
  • C#C#设计模式之Strategy策略模式解决007大破密码危机问题示例

    C#设计模式之Strategy策略模式解决007大破密码危机问题示例

    这篇文章主要介绍了C#设计模式之Strategy策略模式解决007大破密码危机问题,简单描述了策略模式的定义并结合加密解密算法实例分析了C#策略模式的具体使用...

    GhostRider10972022-01-21
  • C#深入理解C#的数组

    深入理解C#的数组

    本篇文章主要介绍了C#的数组,数组是一种数据结构,详细的介绍了数组的声明和访问等,有兴趣的可以了解一下。...

    佳园9492021-12-10
  • C#VS2012 程序打包部署图文详解

    VS2012 程序打包部署图文详解

    VS2012虽然没有集成打包工具,但它为我们提供了下载的端口,需要我们手动安装一个插件InstallShield。网上有很多第三方的打包工具,但为什么偏要使用微软...

    张信秀7712021-12-15
  • C#如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

    如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

    这篇文章主要给大家介绍了关于如何使用C#将Tensorflow训练的.pb文件用在生产环境的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴...

    bbird201811792022-03-05
  • C#SQLite在C#中的安装与操作技巧

    SQLite在C#中的安装与操作技巧

    SQLite,是一款轻型的数据库,用于本地的数据储存。其优点有很多,下面通过本文给大家介绍SQLite在C#中的安装与操作技巧,感兴趣的的朋友参考下吧...

    蓝曈魅11162022-01-20
  • C#C#微信公众号与订阅号接口开发示例代码

    C#微信公众号与订阅号接口开发示例代码

    这篇文章主要介绍了C#微信公众号与订阅号接口开发示例代码,结合实例形式简单分析了C#针对微信接口的调用与处理技巧,需要的朋友可以参考下...

    smartsmile20127762021-11-25