2014-04-29 2 views
2

나는 시간, 분 초를 얻기 위해 기본 함수를 사용하고있다. 시간이 24 시간 미만이면 모든 것이 작동합니다. 24 시간이 아니더라도 몇 시간을 보내고 싶습니다.이 datetime 메서드가 실패하는 이유는 무엇입니까?

folowing 예를 아래 생산 : 00H : 00m : 00 년대

내 시험 :

[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 
         ); 
} 

답변

1

당신은 TimeSpan.TotalHours를 사용해야하지만 이중이 너무 너무 형식을 수정 반환 : 당신은 모든 시간을 얻을 수있는 값을 절단 할 필요가

return string.Format("{0:00}h:{1:D2}m:{2:D2}s", t.TotalHours, 
               t.Minutes, t.Seconds); 
+0

아 ... 좋아! 그것에 대해 읽을 필요가 있습니다. 서식을 잊어 버렸습니다. 감사! – InCode

6

이 을 시도합니다. 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 
+0

수 있습니다. 링크에는 많은 예제가 있습니다. –

1

사용은 TimeSpan의 전체 값을 반환 TotalHours 속성은, 전체와 부분 시간 표현.

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 
); 
} 
+0

@TheTruthIsInCode : 그것은 이상합니다 ... 수학에'floor' 메소드가 없다고 말하면 'Floor'이어야합니다. 코드를 수정했습니다. – Guffa

+0

확인. 내 실수는 TotalHours에 대한 변경 사항을 보지 못했습니다 ... 이제 형식 예외가 발생했습니다 : 형식 지정자가 유효하지 않습니다. 우리가 가까워지고있어! – InCode

-1

이유는 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 ; 
} 
+0

이것은 나에게 훨씬 더 복잡해 보입니다. – mason

관련 문제