如何基于TimeSpan实现首尾动态时间戳间中间时间戳的均等分配?
如何基于首尾TimeSpan均等分配中间时间戳?
嘿,我完全懂你的需求——要让中间两个时间戳根据首尾的动态值自动调整,实现四个时间点的均等分配,而且因为TimeSpan类型没法直接和整数做除法运算,确实得换个思路处理。咱们一步步来解决这个问题:
核心思路
解决的关键是把TimeSpan转换成可计算的数值类型(比如总分钟数),完成均等分配的计算后,再转换回TimeSpan类型格式化输出。具体步骤:
- 将首尾两个TimeSpan转换为总分钟数(
TotalMinutes属性),这样就能自由做算术运算了 - 计算首尾时间的总差值,再除以间隔数(4个时间点对应3个间隔)得到每个分段的时长
- 用首时间的总分钟数依次加上间隔时长,算出中间两个时间的总分钟数
- 将计算出的总分钟数转回TimeSpan,再格式化为
{HH:MM}字符串
修正后的完整代码示例
首先你的原始代码里有变量名重复的问题(比如totalMinutes、result没有对应_01/_02后缀),我帮你修正并补充了中间时间的计算逻辑:
public TimeSpan HoursMinutes_01; public double totalMinutes_01; private string result_01; public TimeSpan HoursMinutes_04; public double totalMinutes_04; private string result_04; // 新增中间时间的变量 public TimeSpan HoursMinutes_02; private string result_02; public TimeSpan HoursMinutes_03; private string result_03; void Start() { // 初始化首尾时间(这里可以换成动态获取的值) HoursMinutes_01 = new TimeSpan(1, 0, 0); // Timer1: 01:00 HoursMinutes_04 = new TimeSpan(4, 0, 0); // Timer4: 04:00 // 转换为总分钟数用于计算 totalMinutes_01 = HoursMinutes_01.TotalMinutes; totalMinutes_04 = HoursMinutes_04.TotalMinutes; // 计算间隔时长:4个时间点有3个间隔 double diffMinutes = totalMinutes_04 - totalMinutes_01; double intervalMinutes = diffMinutes / 3; // 计算中间两个时间的总分钟数,转回TimeSpan double totalMinutes_02 = totalMinutes_01 + intervalMinutes; HoursMinutes_02 = TimeSpan.FromMinutes(totalMinutes_02); double totalMinutes_03 = totalMinutes_01 + 2 * intervalMinutes; HoursMinutes_03 = TimeSpan.FromMinutes(totalMinutes_03); // 格式化为HH:MM字符串 result_01 = string.Format("{0:D2}:{1:D2}", HoursMinutes_01.Hours, HoursMinutes_01.Minutes); result_02 = string.Format("{0:D2}:{1:D2}", HoursMinutes_02.Hours, HoursMinutes_02.Minutes); result_03 = string.Format("{0:D2}:{1:D2}", HoursMinutes_03.Hours, HoursMinutes_03.Minutes); result_04 = string.Format("{0:D2}:{1:D2}", HoursMinutes_04.Hours, HoursMinutes_04.Minutes); }
额外注意点
- 如果首尾时间的差值不是3的整数倍,计算出的中间时间会带有小数分钟(比如转成秒),如果你的业务只需要整数分钟,可以用
Math.Round(totalMinutes_02)来取整后再转TimeSpan - 要是后续首尾时间是动态变化的,把计算逻辑封装成一个方法,每次首尾值更新时调用即可
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

