计算2个计时器值之间的平均值

时间:2011-07-04 18:42:28

标签: c# java puzzle

我写了一个执行此功能的功能,我对性能和功能不满意。实现。我想看看是否有人可以帮助我以有效的方式实现这个漂亮的功能。

该函数应返回一个字符串,该字符串是两个计时器值之间的平均时间。 2个计时器值都是格式"MM:SS:HS"的字符串,例如,如果将值"02:02:20""04:04:40"传递给函数,它应该输出这些值之间的平均时间并将其作为字符串返回格式相同"03.03.30"

我想用C#实现它,Java也很好。

期待您的解决方案。谢谢你的阅读!

5 个答案:

答案 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对象。这将是平均值。