我写了一个执行此功能的功能,我对性能和功能不满意。实现。我想看看是否有人可以帮助我以有效的方式实现这个漂亮的功能。
该函数应返回一个字符串,该字符串是两个计时器值之间的平均时间。 2个计时器值都是格式"MM:SS:HS"
的字符串,例如,如果将值"02:02:20"
和"04:04:40"
传递给函数,它应该输出这些值之间的平均时间并将其作为字符串返回格式相同"03.03.30"
。
我想用C#实现它,Java也很好。
期待您的解决方案。谢谢你的阅读!
答案 0 :(得分:9)
TimeSpan.Parse
解析这两个值TimeSpan.Ticks
)的刻度数并除以2得到平均值(因为你不能直接划分TimeSpan
)TimeSpan.FromTicks
转换回TimeSpan
ToString
,将TimeSpan
转换回字符串。(我不确定为什么其他答案建议减法,当通常通过添加值然后除以...来获得平均值时)。
就我个人而言,我可能会将其拆分为两种方法,其中一种只是平均部分,另一种是文本转换:
public static TimeSpan Average(TimeSpan first, TimeSpan second)
{
return TimeSpan.FromTicks((first + second).Ticks / 2);
}
public static string Average(string first, string second)
{
TimeSpan firstSpan = TimeSpan.Parse(first);
TimeSpan secondSpan = TimeSpan.Parse(second);
return Average(firstSpan, secondSpan).ToString();
}
你可能需要弄乱一点才能得到你想要的确切文本格式 - 在.NET 4中有比以前更多的选项,使用带有格式字符串等的ToString
。
答案 1 :(得分:1)
Jon Skeet是对的。以下是获取两个TimeSpans平均值的函数
public TimeSpan TimeSpanAverage(TimeSpan earlier, TimeSpan later) {
return (new TimeSpan((earlier.Ticks + later.Ticks) / 2));
}
旧答案:
您是否尝试过使用TimeSpan.Subtract?
您可以像这样使用它
TimeSpan time1 = new TimeSpan(2, 2, 2);
TimeSpan time2 = new TimeSpan(4, 4, 4);
time1.Subtract(time2)
Subtract返回另一个TimeSpan
答案 2 :(得分:1)
在C#中,使用DateTime / TimeSpan类。取两者的Ticks属性,将一个加到另一个,除以2,然后瞧!
答案 3 :(得分:0)
TimeSpan ts = new TimeSpan(04,04,04);
TimeSpan t2 = new TimeSpan(02,02,02);
Console.WriteLine(ts.Subtract(t2));
TimeSpan有一个Subtract方法,可以为你解决这个问题。
答案 4 :(得分:0)
我最简单的解决方案是使用DateTime类的Ticks属性。在您的情况下,如果您的范围由2个DateTime值组成,则只需添加它们的Ticks并将其除以2.通过使用接受ticks作为参数的ctor构造新的DateTime对象。这将是平均值。