두 시간 사이에 몇 분이 있는지 계산


86

내 응용 프로그램에 시작 및 종료 시간을 보유하는 datagridview가 있습니다. 이 두 시간 사이의 분 수를 계산하고 싶습니다. 지금까지 :

var varFinish = tsTable.Rows[intCellRow]["Finish Time"];
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue;
int intMinutes = TimeSpan.FromMinutes(varTime);

그러나 마지막 줄은 Timespan 생성자에 대해 잘못된 인수를 사용하고 있기 때문에 컴파일되지 않습니다. 두 시간 사이의 분 수를 계산하는 방법에 대해 꽤 많이 연구했지만 약간의 벽돌 벽에 부딪 혔습니다. 누군가 내 목표를 달성하는 가장 좋은 방법에 대해 조언 해 주시겠습니까?

편집하다/

이제 내 코드는 다음과 같습니다.

var varFinish = tsTable.Rows[intCellRow]["Finish Time"];
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue;
int intMinutes = (int)varTime.TotalMinutes;

그러나 두 번째 줄에서 잘못된 캐스트가 발생합니다. varFinish와 varValue는 모두 시간입니다 (예 : 10:00 및 8:00). 그렇다면 왜 DateTime을 입력하지 않는지 확실하지 않습니까?


varFinish가 문자열이면 문자열을 DateTime으로 캐스트 할 수 없습니다. DateTime.Parse (...)를 사용해야합니다. 그럼에도 불구하고 varFinish에 날짜가 없으면 오늘 날짜를 의미합니다.
Jim

답변:


160

이 시도

DateTime startTime = varValue
DateTime endTime = varTime

TimeSpan span = endTime.Subtract ( startTime );
Console.WriteLine( "Time Difference (minutes): " + span.TotalMinutes );

편집 : 'span.Minutes'를 시도하는 경우 시간 범위 [0 ~ 59]의 분만 반환하고이 간격에서 모든 분의 합계를 반환하려면 'span.TotalMinutes'를 사용합니다.


2
이것은 좋은 대답이지만 스팬에 0 을 제공합니다. 두 시간의 차이가 1 시간 이상 (즉, 60 분 이상) 인 경우 분
Asif Mehmood

6
@MalikAsif. 방금 61 분 동안 시도했는데 예상대로 1 시간 1 분을 얻었습니다. 스팬이 정확히 60 분이면 예, 분은 0이됩니다. 당신은 생각하고 있었습니까 TotalMinutes()?
Jim

17
사실이 아니다. span.Minutes숫자 [0..59]를 반환합니다. 사용 span.TotalMinutes대신에
스텐 페트로프

2
이것은 받아 들여진 대답이되어서는 안됩니다. 다른 의견에 따르면 문제를 제대로 해결하지 못합니다.
tjmoore

2
@tjmoore 의견에 감사드립니다. 동의합니다. 나는 2012 년 1 월에 원래 질문에 답했고 그 후 질문이 수정되었습니다. 대부분의 사람들이 원래의 편집되지 않은 질문을받은 지 5 년 후에 답변을 읽고 있기 때문에 나는 때때로이 답변에 대해 반대 투표를받습니다.
Kane


9

질문 코드에서 TimeSpan.FromMinutes잘못 사용하고 있습니다. 다음 메서드 서명을 제공하는 TimeSpan.FromMinutes에 대한 MSDN 설명서 를 참조하십시오 .

public static TimeSpan FromMinutes(double value)

따라서 다음 코드는 컴파일되지 않습니다.

var intMinutes = TimeSpan.FromMinutes(varTime); // won't compile

대신 TimeSpan.TotalMinutes 속성을 사용하여이 산술을 수행 할 수 있습니다 . 예를 들면 :

TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
double fractionalMinutes = varTime.TotalMinutes;
int wholeMinutes = (int)fractionalMinutes;

3

다음 TotalMinutes과 같이 속성 을 쿼리하면 됩니다.varTime.TotalMinutes


1

endTime과 startTime의 차이 가 60 Minutes 이상 이면 문 : endTime.Subtract(startTime).Minutes;은 항상을 반환 (minutesDifference % 60)합니다. 분명히 우리가 몇 분 (여기서는 몇 시간이 아님)에 대해서만 이야기 할 때 바람직하지 않습니다.
다음은 원하는 경우 몇 가지 방법입니다 total number of minutes(다른 typecast에서).

// Default value that is returned is of type *double* 
double double_minutes = endTime.Subtract(startTime).TotalMinutes; 
int integer_minutes = (int)endTime.Subtract(startTime).TotalMinutes; 
long long_minutes = (long)endTime.Subtract(startTime).TotalMinutes; 
string string_minutes = (string)endTime.Subtract(startTime).TotalMinutes; 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.