C#中基于时间差的动态着色实现求助
解决时间差比较与动态着色的问题
嘿,我懂你卡在哪了——你直接把Subtract返回的TimeSpan类型转成int肯定会出问题,因为TimeSpan是一个包含天、小时、分钟、秒等多个时间维度的结构体,不是单一的数值,强行转int只会得到无意义的结果。
咱们一步步来修正这个逻辑:
第一步:先安全解析时间并计算时间差
首先建议你把解析后的时间存起来,避免重复调用DateTime.Parse,同时用TryParse做安全解析,防止时间格式错误导致异常:
// 先安全解析时间字符串 if (DateTime.TryParse(timeNow, out DateTime currentTime) && DateTime.TryParse(timeLogged, out DateTime entryTime)) { // 计算时间差,用减法运算符和Subtract效果一致,写法更简洁 TimeSpan timeDifference = currentTime - entryTime; // 接下来在这里判断时间差并设置背景色 } else { // 处理时间格式不正确的情况,比如给用户提示或者用默认背景 }
第二步:正确比较时间差的分钟数
要判断是否超过10/20分钟,你需要用到TimeSpan的TotalMinutes属性——它会返回时间差的总分钟数(比如1小时15分钟会返回75,而不是15),这才是你需要的比较依据:
// 接上面的代码块 if (timeDifference.TotalMinutes > 20) { // 当前时间比进入时间晚20分钟以上,设置红色背景 // 示例:yourControl.BackColor = Color.Red; } else if (timeDifference.TotalMinutes > 10) { // 当前时间比进入时间晚10-20分钟之间,设置橙色背景 // 示例:yourControl.BackColor = Color.Orange; } else { // 时间差在10分钟以内,用默认背景色 // 示例:yourControl.BackColor = Color.White; }
注意区分两个容易混淆的属性
这里要提醒你别搞混TotalMinutes和Minutes:
Minutes:只返回时间差里的“分钟部分”(比如1小时5分钟的话,Minutes是5)TotalMinutes:返回时间差转换成分钟的总数(1小时5分钟的话,TotalMinutes是65)
你的需求是判断总时长是否超过10/20分钟,所以一定要用TotalMinutes。
这样写下来,就能准确根据时间差来设置对应的背景色啦~
内容的提问来源于stack exchange,提问作者aliitascan
相关产品推荐
相关产品推荐

