小编在编写WPF程序时,需要做一个判断:定时使用Modbus协议使用Quartz.net 定时任务读取设备中的数据,同时也使用定时任务判断是否长时间获取不到数据的情况,如果程序中超过一分钟没有获取到数据(数据没有更新),则认为已经掉线。因此在类中使用了 DateTime类型数据记录获取数据的时间。

判断是否在线使用了当前时间减去获取数据的时间,类似于这样:

  1. RunningTime = DateTime.MinValue;
  2. var x = DateTime.Now - RunningTime;
  3. var y = x.Minutes>1?"连接断开":"连接正常";

上述 x的类型为 TimeSpan。那么问题就从这里埋下了。

问题再现

出现问题的时间点:在不连接设备时,保持程序在运行状态,整点时间时出现的时候就会出现连接正常的状态,通过日志进行分析,发现整点时,分钟为0,与时间最小值做完运算后得到的 x.Minutes的值就为 0,因此出现连接正常的情况。

解决方法

通过TimeSpan的文档发现 TimeSpan中的属性如下:

属性 解释
Days 获取当前 TimeSpan 结构所表示的时间间隔的天数部分。
Hours 获取当前 TimeSpan 结构所表示的时间间隔的小时数部分。
Milliseconds 获取当前 TimeSpan 结构所表示的时间间隔的毫秒数部分。
Minutes 获取当前 TimeSpan 结构所表示的时间间隔的分钟数部分。
Seconds 获取当前 TimeSpan 结构所表示的时间间隔的秒数部分。
Ticks 获取表示当前 TimeSpan 结构的值的刻度数。
TotalDays 获取以整天数和天的小数部分表示的当前 TimeSpan 结构的值。
TotalHours 获取以整小时数和小时的小数部分表示的当前 TimeSpan 结构的值。
TotalMilliseconds 获取以整毫秒数和毫秒的小数部分表示的当前 TimeSpan 结构的值。
TotalMinutes 获取以整分钟数和分钟的小数部分表示的当前 TimeSpan 结构的值。
TotalSeconds 获取以整秒数和秒的小数部分表示的当前 TimeSpan 结构的值。

通过 TimeSpan的属性发现,按分钟比较需要使用 TotalMinutes属性才可以。

说明

在通过时间运算方法使用 TimeSpan作比较时,要特别注意。 还有,有事没事要多看相关文档才可以。

【火坑】一切从TimeSpan说起的更多相关文章

  1. 从配置读取一段时间(TimeSpan)

    C#的TimeSpan表示一段时间,DateTime表示一个时间点.TimeSpan可正可负,可与DateTime相加减,很方便,我喜欢. 代码中我们经常要表示一段时间,用一个统一的单位(时 或者 分 ...

  2. c# TimeSpan

    转自:http://blog.163.com/y_p_xu/blog/static/17085710220116472030543/ /// <summary>        /// 将时 ...

  3. C# TimeSpan 计算时间差(时间间隔)

    命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) 说明: 1.DateTime值类型代表了一个从公元0001年1月1日0点0分0秒到公元9999年12月31日23点 ...

  4. C# 计算时间差 用timespan函数

    TimeSpan 结构  表示一个时间间隔. 命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) 1.DateTime值类型代表了一个从公元0001年1月1日0点0分 ...

  5. Javascript倒计时组件new TimeSpan(hours, minutes, minutes)

    function TimeSpan(h, m, s) { this.h = Number(h); this.m = Number(m); this.s = Number(s); } TimeSpan. ...

  6. 转:TimeSpan的用法

    转:http://www.cnblogs.com/shuang121/archive/2011/03/03/1969583.html 举例:时间增加一天:DateTime.Parse(txt_Date ...

  7. 找不到方法"Boolean System.Threading.WaitHandle.WaitOne(TimeSpan)"的解决方案

    找不到方法"Boolean System.Threading.WaitHandle.WaitOne(TimeSpan)" http://www.microsoft.com/down ...

  8. C#时间处理--DateTime和TimeSpan

    DateTime dt = DateTime.Now; dt.ToString();//2005-11-5 13:21:25 dt.ToFileTime().ToString();//12775641 ...

  9. [C.Sharp] TimeSpan的用法,获取测试程序运行时间

    TimeSpan的用法 TimeSpan是用来表示一个时间段的实例,两个时间的差可以构成一个TimeSpan实例,现在就来简单介绍一下几点重要的用法: a 先来介绍几个方法 TimeSpan.Minu ...

  10. C# 使用TimeSpan计算两个时间差

    转载:http://www.cnblogs.com/wifi/articles/2439916.html 可以加两个日期之间任何一个时间单位. private string DateDiff(Date ...

随机推荐

  1. 【QCustomPlot】性能提升之修改源码(版本 V2.x.x)

    说明 使用 QCustomPlot 绘图库的过程中,有时候觉得原生的功能不太够用,比如它没有曲线平滑功能:有时候又觉得更新绘图数据时逐个赋值效率太低,如果能直接操作内存就好了:还有时候希望减轻 CPU ...

  2. 1.1. Java简介与安装

    Java简介 Java是一种广泛使用的计算机编程语言,由James Gosling和他的团队在Sun Microsystems公司开发,于1995年首次发布.Java的设计理念是"一次编写, ...

  3. hosts文件妙用,提升网站访问速度!

    一.背景 在讲解hosts文件之前,我们先了解下IP地址与域名的关系. 1.IP地址与域名的关系 IP(Internet Protocol)是一种规定互联网中数据传输的协议,每台连接到互联网中的计算机 ...

  4. Spark SQL 及其DataFrame的基本操作

    1.Spark SQL出现的 原因是什么? Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个叫作Data Frame的编程抽象结构数据模型(即带有Schema信息的RDD),S ...

  5. 前端vue实现页面加水印文字 单个页面所有页面加水印 水印颜色

    前端vue实现页面加水印文字, 可以实现系统所有页面加水印,也可以单个页面加水印, 可更改水印颜色, 下载完整代码请访问uni-app插件市场地址: https://ext.dcloud.net.cn ...

  6. 3 分钟为英语学习神器 Anki 部署一个专属同步服务器

    原文链接:https://icloudnative.io/posts/anki-sync-server/ Anki 介绍 Anki 是一个辅助记忆软件,其本质是一个卡片排序工具--即依据使用者对卡片上 ...

  7. Python运维开发之路《函数进阶》

    面向对象类的进阶 抽象类 python 没有抽象类.接口的概念,所以要实现这种功能需要导入abc模块 py2:导入abc函数,_metaclass__ = abc.ABCMeta;在强制调用类下:@a ...

  8. Prometheus-2:blackbox_exporter黑盒监控

    黑盒监控blackbox_exporter 前边介绍有很多exporter可以直接将metrics暴露给Prometheus进行监控,这些称为"白盒监控",那些exporter无法 ...

  9. 选择排序与冒泡排序(c语言+Java语言)

    选择排序 O(n2) 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置. 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾. 重复第二步,直到所有元素均排序完毕. 例 ...

  10. Vue 先初始化子组件再初始化父组件的方法(自定义父子组件mounted执行顺序)

    写在前面: 本篇内容内容主要讲述了,在使用 Konva 进行开发过程中遇到的一些问题.(既然是组件加载顺序,主要牵扯到的就是,父子组件的关系,父子组件的生命周期) 众所周知,Vue中父子组件生命周期的 ...