두 날짜 시간 값의 차이를 시간 단위로 표시


186

데이터베이스에서 두 개의 날짜 시간 값을 검색 중입니다. 값이 검색되면 두 값의 차이가 필요합니다. 이를 위해 두 날짜 값의 차이를 저장하는 시간 범위 변수를 만듭니다.

TimeSpan? variable = datevalue1 - datevalue2;

이제 Timespan 변수에 저장된 차이를 시간 수로 표시해야합니다. TimeSpan.TotalHours를 언급 했지만 어떤 이유로 똑같이 적용 할 수 없습니다. 어떻게합니까? MVC 프로젝트에서 C #을 사용하고 있습니다. 차이 값을 시간 단위로 간단히 표시해야합니까?

편집 : 시간 범위가 nullable이므로 total hours 속성을 사용할 수 없습니다. 이제 TimeSpanVal.Value.TotalHours를 수행하여 사용할 수 있습니다 .


3
왜 사용할 수 TimeSpan.TotalHours없습니까?
Fredrik Mörk

그것은 나를 허용하지 않습니다. 나는 노력했다. :(
reggie

내 시간 범위가 nullable이므로 totalhours 속성을 사용할 수 없습니까?
reggie


시간 범위 객체의 총 시간을 가지고.Value.TotalHours
smurtagh

답변:


119

나는 nullable 인TimeSpan a TimeSpan?를 선언 하지 않았기 때문에 혼란 스럽다고 생각합니다 . 널 입력이 필요하지 않은 물음표를 제거하거나을 사용하십시오 . TimeSpanvariable.Value.TotalHours


197

당신은 또한보고 싶어 할 수 있습니다

var hours = (datevalue1 - datevalue2).TotalHours;

그러나이 경우 시스템에 " 'System.Nullable <System.TimeSpan>'에 'TotalHours'에 대한 정의가 포함되어 있지 않으며 'System.Nullable <System.TimeSpan>'유형의 첫 번째 인수를 허용하는 확장 메소드 'TotalHours'가 없습니다. "를 찾을 수 있습니다. 그 이유를 말씀해 주시겠습니까?
Neha

8
Nullable은 .TotalHours 대신 .Value.TotalHours가 필요합니다. nullable 랩핑의 요소입니다. 또는 시간 범위로 캐스팅 할 수 있습니다-> ((TimeSpan) (nullabledatevalue1-nullabledatevalue2)). TotalHours
MarkKGreenway 15.58에

90

이 샘플에서는 현재 시간과 현재 시간에 75 초가 추가 된 두 개의 datetime 객체를 만듭니다. 그런 다음 두 번째 DateTime 객체에서 .Subtract () 메서드를 호출합니다. TimeSpan 객체를 반환합니다. TimeSpan 객체를 가져 오면 TimeSpan의 속성을 사용하여 실제시, 분 및 초를 얻을 수 있습니다.

DateTime startTime = DateTime.Now;

 DateTime endTime = DateTime.Now.AddSeconds( 75 );

 TimeSpan span = endTime.Subtract ( startTime );
 Console.WriteLine( "Time Difference (seconds): " + span.Seconds );
 Console.WriteLine( "Time Difference (minutes): " + span.Minutes );
 Console.WriteLine( "Time Difference (hours): " + span.Hours );
 Console.WriteLine( "Time Difference (days): " + span.Days );

결과:

Time Difference (seconds): 15
Time Difference (minutes): 1
Time Difference (hours): 0
Time Difference (days): 0

30
당신과 같은 "전체"를 사용하려면 TotalSeconds, TotalMinutes
필립 에크 베르그

38

당신이 사용하는 이유가 Nullable있습니까?

당신이 사용하려면 Nullable다음을 쓸 수 있습니다 variable.Value.TotalHours.

또는 다음과 같이 쓸 수도 있습니다 (datevalue1 - datevalue2).TotalHours..


아마도 datevalue1 또는 datevalue2는 다음과 같기 때문일 것입니다.DateTime?
Filip Ekberg

@Filip, 괜찮습니다 DateTime. .NET에서 DateTime - DateTime = TimeSpan.
Ilya Kogan

1
@Illya, 나는 그들이 아마 Nullable<DateTime>그리고 따라서 얻을 것을 의미합니다 Nullable<TimeSpan>.
Filip Ekberg

당신의 대답은 정말 효과적입니다. 나는 그것을 찾고 있었다.
gdmanandamohon

7

C #에서 두 날짜를 빼는 또 다른 예는 다음과 같습니다.

if ( DateTime.Now.Subtract(Convert.ToDateTime(objDateValueFromDatabase.CreatedOn)).TotalHours > 24 ) 
{ 
... 
} 

3

직원 급여 시간 또는 기타 정밀 요구 사항에 대한보다 정확한 방법 : :

decimal DeterminePreciseHours(DateTime startTimestamp, DateTime stopTimestamp)
{
    var span = (stopTimestamp - startTimestamp).Value;
    decimal total = (decimal)span.TotalMilliseconds / 60 / 60 / 1000;
    return Math.Round(total, PRECISION_CONSTANT);
}

https://dotnetfiddle.net/tVIoVJ


1
var startTime = new TimeSpan(6, 0, 0); // 6:00 AM
var endTime = new TimeSpan(5, 30, 0); // 5:30 AM 
var hours24 = new TimeSpan(24, 0, 0);
var difference = endTime.Subtract(startTime); // (-00:30:00)
difference = (difference.Duration() != difference) ? hours24.Subtract(difference.Duration()) : difference; // (23:30:00)

서로 다른 두 날짜를 비교하면 날짜 간 차이를 추가 할 수도 있습니다

new TimeSpan(24 * days, 0, 0)

0

와우, 나는 간단하게 말해야한다.

MessageBox.Show("Result: " + (DateTime.Now.AddDays(10) > DateTime.Now));

Result: True

과:

MessageBox.Show("Result: " + DateTime.Now.AddDays(10).Subtract(DateTime.Now));

Result: 10.00:00:00

DateTime 객체에는 부울 결과를 처리하기위한 모든 내장 논리가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.