2013-03-28 3 views
2

안녕하세요 여러분, 저는 흥미로운 상황이 있습니다.
C# 빼기 시간 (시간 분)

pabaigosLaikoLaukelis = 01:00; 
pradziosLaikoLaukelis = 20:00; 
TimeSpan dt = Convert.ToDateTime(pabaigosLaikoLaukelis)- Convert.ToDateTime(pradziosLaikoLaukelis); 
int minutes = (int)dt.TotalMinutes; 

그리고 : 내가 무슨 짓을하기 때문에,

나는 20:00 01:00 오전 얼마나 많은 시간 (분)을 계산하려면,하지만 난 방법을 몰라 나는 결과 -> -1140 분을 얻지 만, 그 대답은 20 시부 터 01 시까 지 5 시간만이 필요합니다.

나는 그것이 아주 쉽다는 것을 알고있다, 그러나 나는 그것을하는 방법을 모른다. (오늘 오후 8시) 난 당신이 (내일은 오전 1시를) subract 필요가 있다고 생각

- - 당신은 날을 지정해야합니다

+1

당신은 날짜 경계를 횡단하는 (오전 1시 오늘 - 오후 8시 오늘). 이 정보를 제공하지 않으면 C#이 정보를 알 수 없습니다. –

+0

결과가 정확합니다. 내일로부터의 시간이 실제로 정확한 날짜인지 확인해야합니다. 첫 번째 Convert.ToDateTime 결과에 하루를 추가하십시오. –

+1

그리고'TotalMinutes' 대신'TotalHours'를 사용하십시오 –

답변

2

당신은 이런 것을 할 수 있습니다

 //Datetime(Year,month,day,hour,min,sec) 
     DateTime date1 = new DateTime(2012, 1, 1, 20, 0, 0); 
     DateTime date2 = new DateTime(2012, 1, 2, 1, 0, 0); 
     string minutes = (date2.Subtract(date1).TotalMinutes).ToString(); 

테스트를 거쳐 작동합니다. 300 분 (5 시간)이 방법에 대해

0

, 당신은 (오늘 오전 1시를) subracting된다 (오늘 8 : 00 PM) 오전 1시 20:00보다 하루 늦은 것을 보여주기 위해, 일 부분을 포함

3

전체를 사용 날짜 시간 문자열 - 다음과 같은 :

int minutes = Convert.ToDateTime("01/02/2012 01:00").Substract(Convert.ToDateTime("01/01/2012 20:00")).TotalMinutes; 
0

당신은 하루에 추가해야 첫 번째 TimeSpan으로 이동하고 TotalHours을 사용하십시오.

var pabaigosLaikoLaukelis = "01:00"; 
var pradziosLaikoLaukelis = "20:00"; 
var oneDayTimeSpan = new TimeSpan(1, 0, 0, 0); 
TimeSpan dt = TimeSpan.Parse(pabaigosLaikoLaukelis).Add(oneDayTimeSpan) - TimeSpan.Parse(pradziosLaikoLaukelis); 
int minutes = (int)dt.TotalHours; // 5 hours 

사용하여 연관 작업 :

var pabaigosLaikoLaukelis = "21:00"; 
var pradziosLaikoLaukelis = "20:00"; 
var leftHours = (int)TimeSpan.Parse(pabaigosLaikoLaukelis).TotalHours; 
var rightHours = (int)TimeSpan.Parse(pradziosLaikoLaukelis).TotalHours; 
// Now we do a Modulus operation which will assure 
// 23 > hours > 0 
// Make sure to check that leftHours != 0 or rightHours != 0 
int hours = (Math.Abs(leftHours * rightHours) + leftHours) % rightHours; //Modulus 
var hoursTimeSpan = TimeSpan.FromHours(hours); 
+0

종료 시간이 21:00 인 경우 1 대신에 25 시간을줍니다. –

+0

예, 시간 연산이 연관성이 없기 때문입니다. 그 시점에서 수학을 사용하는 것이 낫습니다. – Romoku

+0

@caerolus 예제를 제공했습니다. – Romoku

0

은 20:00부터 22:00 사이의 차이가 26시간 대신이 될 것입니다 때문에 endTime- 사용자에 하루 추가로주의!

것만 차이가 두 스트링 변수 제제의 비트 데이터 연산을 수행하기 전에 필요하다 (다음날)

string pabaigosLaikoLaukelis = "01:00"; 
string pradziosLaikoLaukelis = "20:00"; 
// This should be 5 hours 
TimeSpan dt = Convert.ToDateTime(pabaigosLaikoLaukelis) - Convert.ToDateTime(pradziosLaikoLaukelis); 
int hours = (int)dt.TotalHours; 
hours = hours < 0 ? 24 + hours : hours; 
// This should be 19 hours 
dt = Convert.ToDateTime(pradziosLaikoLaukelis) - Convert.ToDateTime(pabaigosLaikoLaukelis); 
hours = (int)dt.TotalHours; 
hours = hours < 0 ? 24 + hours : hours; 
0

(당일) 양 또는 음인지 여부를 확인

string pabaigosLaikoLaukelis = "01:00"; 
string pradziosLaikoLaukelis = "20:00"; 
pabaigosLaikoLaukelis = DateTime.Today.ToString("dd/MM/yyyy") + " " + pabaigosLaikoLaukelis; 
pradziosLaikoLaukelis = DateTime.Today.AddDays(-1).ToString("dd/MM/yyyy") + " " + pradziosLaikoLaukelis; 

TimeSpan dt = Convert.ToDateTime(pabaigosLaikoLaukelis) - Convert.ToDateTime(pradziosLaikoLaukelis); 
Console.WriteLine("{0:D2}:{1:D2}", dt.Hours, dt.Minutes); 
0

:

pabaigosLaikoLaukelis = 01:00; 
pradziosLaikoLaukelis = 20:00; 
TimeSpan startTime = Convert.ToDateTime(pradziosLaikoLaukelis).TimeOfDay; 
TimeSpan endTime = Convert.ToDateTime(pabaigosLaikoLaukelis).TimeOfDay; 
TimeSpan diff = endTime > startTime ? endTime - startTime : endTime - startTime + TimeSpan.FromDays(1); 
int minutes = (int)diff.TotalMinutes;