2013-09-19 4 views
5

У меня есть два переменныхПолучить разницу во времени между двумя промежутка времени в vb.net

Dim starttime As TimeSpan 
Dim endtime As TimeSpan 

Мое значение STARTTIME является: 02: 30: 00 (я имею в виду 2:30)
2:30 утра на другой день My EndTime Value : 10: 30: 00 (я имею в виду 10.30Am)

Я хочу получить разницу во времени. Так что я дал такой код:

Dim span3 As TimeSpan = starttime .Subtract(endtime) 

теперь я получаю span3 это 08:00:00

Это неправильно answer..actually я хочу получить 16:00:00. (это точное отличие от 2.30Am To 10.30 Am), как я могу это вычислить?

+0

ну это не так, точная разница в тот же день * * 9 часов, что в 02:00 утра со следующего дня? –

+2

Ответ правильный, поскольку вы вычитаете временные интервалы, что означает часы и минуты ... Для вашей цели вы должны использовать DateTime. – wonko79

+0

так .. как я могу сделать..и хочу получить 15:00:00 – user2786971

ответ

10

Вам нужно использовать переменную DateTime, чтобы сохранить время начала и окончания. Как это:

Dim startTime As New DateTime(2013, 9, 19, 10, 30, 0)  ' 10:30 AM today 
Dim endTime As New DateTime(2013, 9, 20, 2, 0, 0)  ' 2:00 AM tomorrow 

Dim duration As TimeSpan = endTime - startTime  'Subtract start time from end time 

Console.WriteLine(duration) 

Результат:

15:30:00

UPDATE:

Чтобы преобразовать этот результат минут, вы можете использовать свойство TotalMinutes переменной TimeSpan:

Console.WriteLine(duration.TotalMinutes) 

Результат:

+0

ok ,,, как я могу конвертировать это 15:30:00 в минуты – user2786971

+0

@ user2786971 - Означает ли это _time_ или представляет собой _length_ времени? Если это длительность, вы можете использовать TimeSpan. См. Мой обновленный ответ. –

+0

ok ,, sir ,,, thanks..i получил это – user2786971

3

Вы вводите в заблуждение DateTime и TimeSpan. TimeSpan хранит продолжительность, поэтому ничего о AM и PM не имеет значения. Если вы хотите сравнить два раза, вы должны использовать DateTime и вычесть их оба, что даст вам TimeSpan.

Вы не можете указать TimeSpan значение «2am», вы должны использовать для этого DateTime.

Рассмотрим:

var date1 = DateTime.Now.Date.AddHours(2); // pseudo code 2am 
var date2 = DateTime.Now.Date.AddHours(11); // pseudo code 11am 

var result = date2 - date1; 

В результате здесь будет продолжительность 9 часов.

Если вы хотите, чтобы на следующий день было 2 часа, вы должны включить AddDays (1);

var date1 = DateTime.Now.Date.AddDays(1).AddHours(2); // pseudo code 2am the next day 
var date2 = DateTime.Now.Date.AddHours(11); // pseudo code 11am 

var result = date1 - date2; 

Результат будет 15 часов.

+0

вместо добавления добавления (2) я могу пройти через чаевые (myvariable) .. может быть мое время 02:30:30 – user2786971

+0

sir..i обновлено мое qustion..пожалуйста, см. Мое обновление – user2786971

+0

Вы можете использовать некоторую комбинацию 'AddDays' 'AddHours'' AddMinutes', но не ясно, что вы пытаетесь сделать. Если вы объясните, что вы пытаетесь достичь с помощью этого кода, это может помочь. Это может быть так же просто сделать 'timespan1 - timespan2' вместо' timespan2 - timespan1', или '24 - theResult'. – NibblyPig

1

ВОТ МОЕ РЕШЕНИЕ ДЛЯ РАЗНИЦА В ЧАСЫ

 'WORKS ONLY TIME SPAN WITHIN 48 HRS 
     Dim HRS As TimeSpan 
     Dim St As TimeSpan = TimeSpan.Parse(L_A_START.Text) 
     Dim Cl As TimeSpan = TimeSpan.Parse(L_A_CLOSE.Text) 

     HRS = Cl - St 

     If HRS.Hours <= 0 Then 
      HRS = (HRS + New TimeSpan(0, 24, 0, 0, 0)) 
     End If 

     L_A_HRS.Text = HRS.ToString() 
Смежные вопросы