【火坑】一切从TimeSpan说起
小编在编写WPF程序时,需要做一个判断:定时使用Modbus协议使用Quartz.net 定时任务读取设备中的数据,同时也使用定时任务判断是否长时间获取不到数据的情况,如果程序中超过一分钟没有获取到数据(数据没有更新),则认为已经掉线。因此在类中使用了 DateTime类型数据记录获取数据的时间。
判断是否在线使用了当前时间减去获取数据的时间,类似于这样:
RunningTime = DateTime.MinValue;var x = DateTime.Now - RunningTime;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说起的更多相关文章
- 从配置读取一段时间(TimeSpan)
C#的TimeSpan表示一段时间,DateTime表示一个时间点.TimeSpan可正可负,可与DateTime相加减,很方便,我喜欢. 代码中我们经常要表示一段时间,用一个统一的单位(时 或者 分 ...
- c# TimeSpan
转自:http://blog.163.com/y_p_xu/blog/static/17085710220116472030543/ /// <summary> /// 将时 ...
- C# TimeSpan 计算时间差(时间间隔)
命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) 说明: 1.DateTime值类型代表了一个从公元0001年1月1日0点0分0秒到公元9999年12月31日23点 ...
- C# 计算时间差 用timespan函数
TimeSpan 结构 表示一个时间间隔. 命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) 1.DateTime值类型代表了一个从公元0001年1月1日0点0分 ...
- Javascript倒计时组件new TimeSpan(hours, minutes, minutes)
function TimeSpan(h, m, s) { this.h = Number(h); this.m = Number(m); this.s = Number(s); } TimeSpan. ...
- 转:TimeSpan的用法
转:http://www.cnblogs.com/shuang121/archive/2011/03/03/1969583.html 举例:时间增加一天:DateTime.Parse(txt_Date ...
- 找不到方法"Boolean System.Threading.WaitHandle.WaitOne(TimeSpan)"的解决方案
找不到方法"Boolean System.Threading.WaitHandle.WaitOne(TimeSpan)" http://www.microsoft.com/down ...
- C#时间处理--DateTime和TimeSpan
DateTime dt = DateTime.Now; dt.ToString();//2005-11-5 13:21:25 dt.ToFileTime().ToString();//12775641 ...
- [C.Sharp] TimeSpan的用法,获取测试程序运行时间
TimeSpan的用法 TimeSpan是用来表示一个时间段的实例,两个时间的差可以构成一个TimeSpan实例,现在就来简单介绍一下几点重要的用法: a 先来介绍几个方法 TimeSpan.Minu ...
- C# 使用TimeSpan计算两个时间差
转载:http://www.cnblogs.com/wifi/articles/2439916.html 可以加两个日期之间任何一个时间单位. private string DateDiff(Date ...
随机推荐
- SpringBoot打包成WAR包的时候把第三方jar包打到LIB文件夹下和把第三方jar包打入到SpringBoot jar包中
SpringBoot打包成WAR包的时候把第三方jar包打到LIB文件夹下和把第三方jar包打入到SpringBoot jar包中 转载 首先我们应该知道我们把SPRINGBOOT项目打包成WAR包和 ...
- 「AntV」L7地理可视化:从入门到实践
1. 前言 这是一篇由浅入深的AntV L7的学习笔记总结,记述了从了解到使用的一些过程 本文所使用的数据(包括数据处理过程)和代码均有详细描述,所有案例均可复现,甚至大部分代码可直接使用 如果喜欢分 ...
- malloc/free 与 new/delete
malloc/free与new/delete表达式的区别?相同点: 都是用来申请堆空间不同点: 1. malloc/free是库函数; new/delete是表达式 2. malloc开空间时,并不会 ...
- 快速取模算法(Barrett Reduction)
原理:取模运算低效的原因本质是除法运算的低效.如果能将除法变成其它运算就可以加速.具体地,将除以任意数转化成"乘一个数.除以一个 \(2^k\) "(取 \(2^{62}\) 即可 ...
- 自然语言处理 Paddle NLP - 情感分析技术及应用SKEP-实践
Part A. 情感分析任务 众所周知,人类自然语言中包含了丰富的情感色彩:表达人的情绪(如悲伤.快乐).表达人的心情(如倦怠.忧郁).表达人的喜好(如喜欢.讨厌).表达人的个性特征和表达人的立场等等 ...
- 1. 认识IntelliJ IDEA
恐惧是本能,行动是信仰(在此感谢尚硅谷宋红康老师的教程) 1. Why IDEA ? [注]JetBrains 官方说明: 尽管我们采取了多种措施确保受访者的代表性,但结果可能会略微偏向 JetBra ...
- Transformer编码器和解码器被广泛应用于自然语言处理、计算机视觉、语音识别等领域。下面是一些Trans
目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.1.1 编码器 2.1.2 解码器 2.2 技术原理介绍 2.2.1 编码器 2.2.2 解码器 2.3 相关技术比较 3. 实现步骤 ...
- MYSQL之批量删除(mybatis)
如果参数是array数组 <update id="deleteAll"> delete from C_V WHERE UUID in <foreach item= ...
- Sentieon | 每周文献-Population Sequencing-第一期
群体基因组系列文章-1 标题(英文):The Impact of ACEs on BMI: An Investigation of the Genotype-Environment Effects o ...
- 【Linq】Value cannot be null. (Parameter 'row')
报错代码: 原因分析: Linq中左连接后,取值需要处理null值;如下图修改后恢复正常.