TimeSpan 结构  表示一个时间间隔。

先举一个小例子:(计算两个日期相差的天数)

代码如下:

DateTime dt = DateTime.Now.ToShortDateString(yyyy-MM-dd);//当前日期

      string strdate = "2014-4-15 00:00:00";                                         //时间字符串

      DateTime strdate = Convert.ToDateTime(strdate);                     //先转换为日期格式

TimeSpan ts=new TimeSpan();        //实例化

            ts =  dt.Subtract(strdate);

int i;

i=ts.Days;                   //相差的天数;注:可以为负值;

if (i < 0)

       {

                  MessageBox.Show("strdate>当前日期");

       }

else

{

MessageBox.Show("strdate<=当前日期");

}

//想要天数的绝对值: Math.Abs(i);

以下是转载内容,比较详细:

命名空间:System

程序集:mscorlib(在 mscorlib.dll 中)





1.DateTime值类型代表了一个从公元0001年1月1日0点0分0秒到公元9999年12月31日23点59分59秒之间的具体日期时刻。因此,你可以用DateTime值类型来描述任何在想象范围之内的时间。一个DateTime值代表了一个具体的时刻

2.TimeSpan值包含了许多属性与方法,用于访问或处理一个TimeSpan值

下面的列表涵盖了其中的一部分:

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( 10, 20, 30, 40, 50 ) 10.20:30:40.0500000





TimeSpan( 1111, 2222, 3333, 4444, 5555 ) 1205.22:47:09.5550000





TimeSpan (Int32, Int32, Int32) 将新的 TimeSpan 初始化为指定的小时数、分钟数和秒数。





TimeSpan (Int32, Int32, Int32, Int32) 将新的 TimeSpan 初始化为指定的天数、小时数、分钟数和秒数。





TimeSpan (Int32, Int32, Int32, Int32, Int32) 将新的 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。



负数



上面是较晚的日期减较早的日期,所以各属性值为正数,如果是较早的日期减较晚的日期,则属性值为负数。



TimeSpan( 

int days, 

int hours, 

int minutes, 

int seconds 

)



求离最近发表时间的函数

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 

int nDays = ts.Days;//整数天数,1天12小时或者1天20小时结果都是1 









说明:

1.DateTime值类型代表了一个从公元0001年1月1日0点0分0秒到公元9999年12月31日23点59分59秒之间的具体日期时刻。因此,你可以用DateTime值类型来描述任何在想象范围之内的时间。一个DateTime值代表了一个具体的时刻

2.TimeSpan值包含了许多属性与方法,用于访问或处理一个TimeSpan值

下面的列表涵盖了其中的一部分:

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









/// <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结构提供了丰富的方法和属性,通过这些方法和属性,几乎可以直接处理任何时间日期类型数据。表01和表02分别是DateTime结构的常用属性和常用方法及其说明:

属性 说明

Date 获取此实例的日期部分。

Day 获取此实例所表示的日期为该月中的第几天。

DayOfWeek 获取此实例所表示的日期是星期几。

DayOfYear 获取此实例所表示的日期是该年中的第几天。

Hour 获取此实例所表示日期的小时部分。

Millisecond 获取此实例所表示日期的毫秒部分。

Minute 获取此实例所表示日期的分钟部分。

Month 获取此实例所表示日期的月份部分。

Now 创建一个DateTime实例,它是此计算机上的当前本地日期和时间。

Second 获取此实例所表示日期的秒部分。

TimeOfDay 获取此实例的当天的时间。

Today 获取当前日期。

Year 获取此实例所表示日期的年份部分。





表01:DateTime类的常用属性及其说明

方法 说明

Add 将指定的TimeSpan的值加到此实例的值上。

AddDays 将指定的天数加到此实例的值上。

AddHours 将指定的小时数加到此实例的值上。

AddMilliseconds 将指定的毫秒数加到此实例的值上。

AddMinutes 将指定的分钟数加到此实例的值上。

AddMonths 将指定的月份数加到此实例的值上。

AddSeconds 将指定的秒数加到此实例的值上。

AddYears 将指定的年份数加到此实例的值上。

DaysInMonth 返回指定年份中指定月份的天数。

IsLeapYear 返回指定的年份是否为闰年的指示。

Parse 将日期和时间的指定字符串表示转换成其等效的DateTime实例。

Subtract 从此实例中减去指定的时间或持续时间。

ToLongDateString 将此实例的值转换为其等效的长日期字符串表示形式。

ToLongTimeString 将此实例的值转换为其等效的长时间字符串表示形式。

ToShortTimeString 将此实例的值转换为其等效的短时间字符串表示形式。

ToShortDateString 将此实例的值转换为其等效的短日期字符串表示形式。









表02:DateTime结构的常用方法及其说明





表03和表04分别是TimeSpan结构的常用属性和常用方法及其说明:

属性 说明

Days 获取由此实例表示的整天数。

Hours 获取由此实例表示的整小时数。

Milliseconds 获取由此实例表示的整毫秒数。

Minutes 获取由此实例表示的整分钟数。

Seconds 获取由此实例表示的整秒数。

Ticks 获取用刻度表示的此实例的值。

TotalDays 获取以整天数和天的小数部分表示的此实例的值。

TotalHours 获取以整小时数和小时的小数部分表示的此实例的值。

TotalMilliseconds 获取以整毫秒数和毫秒的小数部分表示的此实例的值。

TotalMinutes 获取以整分钟数和分钟的小数部分表示的此实例的值。

TotalSeconds 获取以整秒数和秒的小数部分表示的此实例的值。





表03:TimeSpan结构的常用属性及其说明

方法 说明

Add 将指定的TimeSpan添加到此实例中。

Duration 返回其值为此实例的绝对值的TimeSpan。

FromDays 返回表示指定天数的TimeSpan,其中对天数的指定精确到最接近的毫秒。

FromHours 返回表示指定小时数的TimeSpan,其中对小时数的指定精确到最接近的毫秒。

FromMilliseconds 返回表示指定毫秒数的TimeSpan。

FromMinutes 返回表示指定分钟数的TimeSpan,其中对分钟数的指定精确到最接近的毫秒。

FromSeconds 返回表示指定秒数的TimeSpan,其中对秒数的指定精确到最接近的毫秒。

Subtract 从此实例中减去指定的TimeSpan。

winform timespan 两个时间的间隔(差) 分类: WinForm 2014-04-15 10:14 419人阅读 评论(0) 收藏的更多相关文章

  1. SQL 计算两个时间之差 分类: SQL Server 2014-07-04 10:57 119人阅读 评论(0) 收藏

    SQL语句: A,B为两个字段,A为开始时间,B为结束时间,ss为秒. SELECT datediff(ss,A,B)  FROM Table 详细:http://www.w3school.com.c ...

  2. 深入N皇后问题的两个最高效算法的详解 分类: C/C++ 2014-11-08 17:22 117人阅读 评论(0) 收藏

    N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行.同一列.同一斜线上的皇后都会自动攻击). 一. 求解N皇后问题是算法中回溯法应用的一个经典案例 回溯算 ...

  3. 窗体控件 回车事件 分类: WinForm 2014-11-21 10:45 233人阅读 评论(0) 收藏

    说明: (1)设置窗体控件的TabIndex属性,(按回车顺序设置TabIndex的大小) (2)修改窗体的一个属性:KeyPreview=true //protected override void ...

  4. winform datetimepacker 开始日期 结束日期 分类: WinForm 2014-07-15 19:14 124人阅读 评论(0) 收藏

    dtpStart;//开始日期 dtpEnd;//结束日期 1:开始日期小于结束日期 加载dtpEnd的ValueChanged事件即可. //开始日期小于结束日期         private v ...

  5. winform DataGridView 导出到Excel表格 分类: WinForm 2014-07-04 10:48 177人阅读 评论(0) 收藏

    public bool ExportDataGridview(DataGridView gridView)         {             if (gridView.Rows.Count ...

  6. 点击Enter键,文本框焦点改变 分类: WinForm 2014-04-15 10:30 223人阅读 评论(0) 收藏

    一个例子: 一个简单的 登陆界面,有用户名.密码文本框.登陆按钮.  想要实现的效果是,用户输入用户名之后,点击Enter键进入到下一个文本框,同理,输入完密码之后,登陆按钮获得焦点,再次点击Ente ...

  7. 事件处理之一:两种方式:监听器与回调 分类: H1_ANDROID 2013-10-31 10:26 3250人阅读 评论(0) 收藏

    Android组件的事件处理有2种方式: 1.基于监听器的事件处理方式:先定义组件,然后为组件设定监听器. 详见http://blog.csdn.net/jediael_lu/article/deta ...

  8. 本周博客--WinForm线程初步 2014-10-31 09:15 54人阅读 评论(0) 收藏

    嗯,WinForm作为一个比较程序的微软的技术已经为我们服务了很久很久,在技术不断更新的今天WinForm虽显老态龙钟但是在客户端快速开发中,它的地位还是无可取代的 今天就来分享一下WinForm中的 ...

  9. winform 子窗体数据改变刷新父窗体 分类: WinForm 2014-05-06 18:30 246人阅读 评论(0) 收藏

    两种方法实现: 第一种,传时间变量,主窗体要不停的刷新数据,占用资源比较大. 第二种,用this,感觉比较好用,建议用这种方法. 举例: 主窗体命名:FormA; 子窗体命名:FormB; 数据绑定方 ...

随机推荐

  1. jQuery 源码基本框架

    抽丝剥茧, 7000+ 行的 jQuery 源码基本可以概括为以下的伪代码 (function (window, undefined) { //将 document 封装成 jQuery 对象并缓存 ...

  2. 装了SVN,你的关联图标变了没有?

    装了SVN,你的关联图标变了没有? 开始合作之后,装上了SVN,非常高效,我在VS写了一部分的代码,上传之后,别人通过下载或是更新,就更新到了合作同伴的VS里,相当于大家在一个VS里写代码.和保强他们 ...

  3. github的package.json内容

    补充:npm的init命令生成package.json Name 必须字段. 小提示: 不要在name中包含js, node字样: 这个名字最终会是URL的一部分,命令行的参数,目录名,所以不能以点号 ...

  4. actionscript sendToURL请求url,传递http_referer分浏览器统计

    IE全版本都不传递referer,但会在header中传递X_FLASH_VERSION,例如:"HTTP_X_FLASH_VERSION":"13,0,0,182&qu ...

  5. dedecms织梦导航栏二级菜单的实现方法

    dede导航下拉菜单,一级栏目增加二级下拉菜单   使用dedecms5.6——5.7 将这段代码贴到templets\default\head.htm文件里<!-- //二级子类下拉菜单,考虑 ...

  6. curl获取http请求的状态码

    $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); //设置头文件的信息作为数据流输出 curl_setopt($curl, CUR ...

  7. J2EE开源项目

    这篇文章写在我研究J2SE.J2EE近三年后.前3年我研究了J2SE的Swing.Applet.Net.RMI.Collections.IO.JNI……研究了J2EE的JDBC.Sevlet.JSP. ...

  8. Unity3D批处理脚本

    Unity3D批处理脚本 本文属于转载,如有侵权,请留言,我会及时删除! Max09在模型到处的模型和U3D场景的尺寸不一致,Max09中的1m导到U3D中,只有0.01m,这时可以在U3D中将模型的 ...

  9. yum命令常见方法

    yum check-update 检查可更新的所有软件包 yum update 下载更新系统已安装的所有软件包 yum upgrade 大规模的版本升级,与yum update不同的是,连旧的淘汰的包 ...

  10. bzoj3668

    noi水题,直接推出来每一位上取什么值才能取1直接搞就可以了 ..] of longint; x,n,i,j,k,t,m,ans:longint; fl:boolean; s:string; ch:c ...