我有一个自定义解决方案,每1小时检查一个网站是否在线。
结果是这样的:(每天有一个条目)
一天(每小时)有24个条目。每小时都有一个可用性百分比(100%,95%,0%......等等)。
我的问题是:
如何按百分比计算正常运行时间和停机时间?
如何使用2个日期DateTime
之间的这些值来计算正常运行时间和停机时间,并在几秒钟内得到结果?
正常运行时间非常简单:
那么对于停机时间,我可以做100 - 99.67 = 0.33%吗?
我在两个日期之间以秒为单位获取正常运行时间/停机时间存在一些问题DateTime
例如:如果范围日期是20.04.2015 - 26.05.2015
我想我应该这样做:
每天计算如上所述的正常运行时间(所有每日值的总和除以24个条目)并假设以下值:
现在上述值的总和除以天数(20.04和26.04之间的7天),使97.91 %
在20.04和26.04之间可用。
我假设在几秒钟内获得97.91%的正常运行时间,我应该这样做:
CultureInfo provider = CultureInfo.InvariantCulture;
DateTime first = DateTime.ParseExact("20.04.2015", "dd.MM.yyyy", provider);
DateTime last = DateTime.ParseExact("26.04.2015", "dd.MM.yyyy", provider);
TimeSpan time = last - first;
decimal secondsUptime = ((time.Days * 86400)/100) * 97.91m; //97.91 is the uptime calculated above for the time period.
// The problem is how to get this?
decimal secondsDowntime = ?
到目前为止我做了什么,这是正确的方法吗?
如何获得secondsDowntime?
答案 0 :(得分:3)
如果您已经拥有Up time percent,那么您所要做的就是非常简单的数学:
decimal PercentDownTime = 100 - PercentUpTime;
decimal SecondsUpTime = (time.Seconds / 100) * PercentUpTime;
decimal SecondsDownTime = (time.Seconds / 100) * PercentDownTime;
感谢conditional annotation提醒我们TimeSpan
的{{3}}属性,但在这种情况下,可以使用Robert属性。
答案 1 :(得分:1)
支持... Ur输入数字错误。如果你每小时测量一次并显示每小时的结果,那么你的11:00的结果是97%?它应该是100%或0%它在那个小时上升或下降....除非你实际上在那个小时做了更多的计算...但即使这样得到97你将不得不做至少100次测试那小时和3他们失败了。
但如果你的数字是正确的,公式就是这个......
正常运行时间%=(正常运行时间百分比之和)/(测量次数)×100
正常运行时间%=(正常运行时间总和)/ 24×100
停机时间%= 100 - (正常运行时间%)
正常运行时间的秒数=(测量或考虑的小时数)×3600×(正常运行时间%)/ 100
停机时间秒=(测量或考虑的小时数×3600) - (正常运行时间秒)
注意 3600是一小时内的秒数,因此我们将小时乘以该小时数,以达到所需的时间单位秒数。
注意将正常运行时间%替换为0到100之间的数字。不是0和1.如果你使用0到1,那么不要将最后一个除法除以100。