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

作者:黎明&岁月 时间:2021-07-12 11:00:10 

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);

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

以下提供一些常用的方法

求离最近发表时间的函数


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 将此实例的值转换为其等效的短日期字符串表示形式。

来源:http://www.cnblogs.com/qinpengming/p/3265579.html

标签:c#,计算时间差
0
投稿

猜你喜欢

  • 轻松理解Java面试和开发中的IoC(控制反转)

    2023-08-10 03:00:35
  • Java中synchronized锁的深入理解

    2023-08-18 01:36:55
  • Android 采用AOP方式封装6.0权限管理的方法

    2022-09-15 23:26:49
  • Android编程实现点击EditText之外的控件隐藏软键盘功能

    2022-08-07 02:06:08
  • android中处理各种触摸事件的方法浅谈

    2021-06-25 00:51:57
  • Java数组扩容实现方法解析

    2021-08-25 13:08:26
  • 通过C#实现自动售货机接口

    2023-12-16 00:15:36
  • Unity3D实现导航效果

    2022-09-26 02:15:54
  • Spring整合mybatis实现过程详解

    2022-05-23 02:10:23
  • Unity3d 使用Gizmos画一个圆圈

    2022-05-22 05:10:52
  • android绘制圆形图片的两种方式示例

    2021-10-11 13:17:28
  • Java基础知识精通二维数组的应用

    2022-02-03 03:01:28
  • Java虚拟机GC日志分析

    2023-02-21 15:04:40
  • Android图片三级缓存策略(网络、本地、内存缓存)

    2022-08-06 01:28:19
  • SpringBoot 如何从容器中获取对象

    2023-12-06 08:20:40
  • Spring七大事务传递机制深入分析实现原理

    2022-12-21 16:28:37
  • JAVA swing布局管理器实例解析

    2022-01-11 05:05:15
  • 详解C# 托管资源和非托管资源

    2021-10-04 20:57:34
  • Unity实现滑动更换界面效果

    2021-10-06 19:56:40
  • Springboot2.0处理自定义异常并返回json

    2021-06-01 03:42:24
  • asp之家 软件编程 m.aspxhome.com