为什么此日期时间方法失败
本文关键字:方法 失败 时间 日期 为什么 | 更新日期: 2023-09-27 18:01:00
我正在使用一个基本函数来获取小时、分钟和秒。如果时间少于24小时,一切正常。我想得到时间,即使他们是超过24而不是天。
下面的示例产生:00h:00m:00s
我的测试:
[TestMethod()]
public void Test_Hours_Greater_Than_24()
{
EmployeeSkill target = new EmployeeSkill(); appropriate value
double sec = 86400;
string expected = "24h:00m:00s";
string actual;
actual = target.GetAgentTime(sec);
Assert.AreEqual(expected, actual);
}
我的方法:
public string GetAgentTime(double sec)
{
TimeSpan t = TimeSpan.FromSeconds(sec);
return string.Format("{0:D2}h:{1:D2}m:{2:D2}s",
t.Hours,
t.Minutes,
t.Seconds
);
}
尝试t.TotalHours。一旦达到全天,t.Hours
将结束,并相应地增加t.Days
。
获取以整小时和小数小时表示的当前TimeSpan结构的值。
using System;
public class Example
{
public static void Main()
{
// Define an interval of 1 day, 15+ hours.
TimeSpan interval = new TimeSpan(1, 15, 42, 45, 750);
Console.WriteLine("Value of TimeSpan: {0}", interval);
Console.WriteLine("{0:N5} hours, as follows:", interval.TotalHours);
Console.WriteLine(" Hours: {0,3}",
interval.Days * 24 + interval.Hours);
Console.WriteLine(" Minutes: {0,3}", interval.Minutes);
Console.WriteLine(" Seconds: {0,3}", interval.Seconds);
Console.WriteLine(" Milliseconds: {0,3}", interval.Milliseconds);
}
}
// The example displays the following output:
// Value of TimeSpan: 1.15:42:45.7500000
// 39.71271 hours, as follows:
// Hours: 39
// Minutes: 42
// Seconds: 45
// Milliseconds: 750
您应该使用TimeSpan.TotalHours,但它返回一个双精度,因此也修复了格式:
return string.Format("{0:00}h:{1:D2}m:{2:D2}s", t.TotalHours,
t.Minutes, t.Seconds);
使用TotalHours
属性,该属性返回以整小时和小数小时表示的TimeSpan
的整个值。您只需要截断值即可获得整个小时数:
public string GetAgentTime(double sec) {
TimeSpan t = TimeSpan.FromSeconds(sec);
return string.Format(
"{0:D2}h:{1:D2}m:{2:D2}s",
Math.Floor(t.TotalHours),
t.Minutes,
t.Seconds
);
}
为什么要使用TimeSpan
?这更简单,并且完全符合您的要求:
public static string GetAgentTime( double s )
{
int seconds = (int) Math.Round(s,0) ;
int hours = Math.DivRem( seconds , 60*60 , out seconds ) ; // seconds/hour
int minutes = Math.DivRem( seconds , 60 , out seconds ) ; // seconds/minute
string agentTime = string.Format( "{0:00}h:{1:00}m:{2:00}s",
hours , minutes , seconds
) ;
return agentTime ;
}