2010-11-18 9 views
2

제한된 범위에서 단계 크기를 반환하는 함수가 있습니다. 따라서 범위가 {1,2,3,4,5,6..10}이고 5 단계를 원한다면 2 단계 크기를 반환합니다. 이것은 복잡하지 않습니다.C# DateTime : Double to Time

{.1, .2, .3, .4 .... 1}이 (가) 있고 7 단계를 원할 경우 단계 크기는 0.14285입니다. 그런 다음 0.14285를 가장 가까운 관련 시간 측정으로 변환하려고합니다. 이 경우 .14285는 분수 날을 나타냅니다. 예를 들어 정수 1은 하루 종일, .25는 6 시간을 나타냅니다.

.14285 = 12,342.24 seconds = 205.704 Minutes = 3.42 Hours ~= 4 hours. 

난 다음에 0.14285 스냅 할 (4 * 60 * 60 = 14400/(24 * 60 * 60)) = 4 시간 십진수 0.16666이다.

나는 수학을 알아 냈지만, DateTime 자료를 사용하면 더 쉬운 방법이 있는지 궁금합니다.

+2

질문 : 왜 0.14285는 4 시간입니까? 나는 그것을 얻지 못한다. – BeemerGuy

+0

정수 1이 하루와 같으면 .25는 6 시간과 같습니다. .14285는 3.42 시간과 같습니다. 나는 그 때 4 시간까지 반올림했다. – John

답변

4

질문을 명확하게 작성하는 것이 좋습니다. 당신이 말하는 0.14285의 분수를 나타냈다는 것을 깨닫는 데는 시간이 좀 걸렸습니다.

는이 같은 것을 사용할 수 있습니다

// {03:25:42.24} 
TimeSpan unSnapped = TimeSpan.FromDays(0.14285); 

// {04:00:00} : Round up the hours and construct a TimeSpan from it 
TimeSpan snapped = TimeSpan.FromHours(Math.Ceiling(unSnapped.TotalHours)); 

// 0.166666666 
double snappedFractionOfADay = snapped.TotalDays; 

당신은 시간 스팬에 TotalXXX 속성을 검사 할 수있는 다른 정보를 얻기 위해 필요한 경우, 언급.

+0

이것은 훌륭하게 작동했습니다. 나는 이런 식으로 뛰어 다니고 있었고 당신은 배달했습니다. 감사! – John