小编在编写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. 值得推荐的Blazor UI组件库

    前言 本文主要是推荐一些开源.免费.实用.美观的Blazor UI组件库,提供给广大C#/.NET开发者们学习和使用(注意:排名不分先后,都是十分优秀的开源框架和项目).本文中的所有框架都已经收录到适 ...

  2. Spring Boot 3.1中如何整合Spring Security和Keycloak

    在今年2月14日的时候,Keycloak 团队宣布他们正在弃用大多数 Keycloak 适配器.其中包括Spring Security和Spring Boot的适配器,这意味着今后Keycloak团队 ...

  3. Java(break、continue、label)

    1.break break在任何循环语句的主体部分,均可用break控制循环的流程.break用于强行退出循环,不执行循环中剩余的语句.(break语句也在switch语句中使用) 例如:循环输出10 ...

  4. 从 pheatmap 无缝迁移至 ComplexHeatmap

    pheatmap 是一个非常受欢迎的绘制热图的 R 包.ComplexHeatmap 包即是受之启发而来.你可以发现Heatmap()函数中很多参数都与pheatmap()相同.在 pheatmap  ...

  5. QQ 邮箱设置自定义域名邮箱

    编者有话说 这篇文章来源于2019年12月左右,我在配置 Galaxy 生信分析平台的邮件服务过程中的一个尝试,我最早把它记录在了语雀上面,但由于某些原因一直迟迟没有更新到生信科技爱好者的公众号.直至 ...

  6. ChatGPT 问答

    Win32GUI编程时,创建窗口触发消息的顺序 在Win32 GUI编程中,创建窗口并显示到屏幕上时,系统会触发一系列的消息,这些消息可以用来完成窗口的初始化和其他相关的工作.下面是创建窗口触发消息的 ...

  7. tvm relay IR 可视化

    本文地址: https://www.cnblogs.com/wanger-sjtu/p/16819877.html 发现最近relay 的可视化已经在tvm主线上支持了,这里有一个简单的demo代码记 ...

  8. 前端vue单个文件上传支持图片,压缩包以及文件 , 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id=13066

    前端vue单个文件上传支持图片,压缩包以及文件 , 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id=13066 效果图如下: 使用方 ...

  9. 怎么让英文大预言模型支持中文?(一)构建自己的tokenization

    代码地址:https://github.com/taishan1994/sentencepiece_chinese_bpe Part1前言 目前,大语言模型呈爆发式的增长,其中,基于llama家族的模 ...

  10. unity前后端通信

    1. 配置请求体中的Json字符串 1 request_data = new RequestBodyClass(); 2 request_data.a = "Json第一个字段"; ...