COMPARAR HORAS

ELMO01 08/11/2017 11:46:29
#477706
Oi pessoal,

Estou tentando comparar dois horários diferentes sendo que um se inicia em um dia e termina no outro. Fiz as seguintes linhas de comando:

Dim A1 As DateTime = DateTime.Parse(Me.MsK_Hora.Text) -> Hora Inicial
Dim A2 As DateTime = DateTime.Parse(MksFinal.Text) -> Hora final
While A1 >= A2
Dim Conn3 As New MySqlConnection(StrServ)
Conn3.Open()
Dim Campos3 As String
Dim Valores3 As String
Campos3 = [Ô](COD_DIAS, COD_DESC, Hora)[Ô] [ô] Variáveis do Banco de Dados - MYSQL
Valores3 = [Ô](@COD_DIAS, @COD_DESC, @Hora)[Ô]
Dim cSQL3 As String = [Ô]INSERT INTO tec_diasdados [Ô] & Campos3 & [Ô] VALUES [Ô] & Valores3
Dim Cmd3 As New MySqlCommand(cSQL3, Conn3)
Cmd3.Parameters.AddWithValue([Ô]@COD_DIAS[Ô], NewRonda).ToString()
Cmd3.Parameters.AddWithValue([Ô]@COD_DESC[Ô], Me.Txt_Ronda2.Text).ToString()
Cmd3.Parameters.AddWithValue([Ô]@Hora[Ô], Mid(A1, 12, 5)).ToString()
Cmd3.ExecuteNonQuery()
Conn3.Close()
A1 = A1.Add(TimeSpan.Parse(Msk_Minu3.Text)).ToString-> adicionando minutos no hora inicial
End While

Mais estou com problemas, quando a variável A1(Hora Inicial) é maior que a A2(Hora Final) o WHILE teria que terminar mais o que está acontecendo é que o mesmo está entrando em um LOOP e não sai.

Alguém pode me indicar o que estou fazendo de errado para que este comando não sai.

Obrigado.




JABA 08/11/2017 14:47:08
#477719
Resposta escolhida
Se é preciso sair do WHILE quando o A1 é maior do que A2, então você teria que inverter a ordem dos operadores. Ou seja, em vez de ser While A1 >= A2, teria que ser While A1 <= A2.
ELMO01 09/11/2017 08:03:39
#477740
Jaba fiz o que vc me propôs mais não funcionou, co While continua em LOOP, mais agora já sei o pq, estou utilizando a instrução DateTime.Parse onde aparece a data e o horário, mais como sabemos, a data começa em um dia e termina no outro, assim sendo, dá erro não no horário mais sim na data. Tenho que achar uma maneira de verificar somente o horário e não a data mais o horário. Se vc ou outra pessoa daqui do forum poder me ajudar ou se tiver outra ideia que possam me passar será bem vinda.

Obrigado.
NOWLIGHTS 09/11/2017 13:16:59
#477748
Tenta usar TimeSpan
JABA 09/11/2017 13:32:20
#477749
Utilize um TimeSpan para isso:

        Dim h1 As TimeSpan
Dim h2 As TimeSpan

h1 = TimeSpan.Parse([Ô]00:30:00[Ô])
h2 = TimeSpan.Parse([Ô]00:10:00[Ô])

If (h1 > h2) Then
MsgBox(h1.ToString())
Else
MsgBox(h2.ToString())
End If
ELMO01 14/11/2017 08:36:37
#477835
Jaba, testei o que vc me propôs mais inda não está dando certo,.
por exemplo tenho A1=19:00 e A2=07:00, em A1 faço o acréscimo de 00:30 até atingir o mesmo horário de A2, mais quando A1 chega no horário de 00:00 a mesma fica assim 1.00:30:00 e A2=07:00, ao fazer o teste entre A1 >= A2 dá se o erro pq A1=1.00:30:00 e A2 = 07:00:00.
Tem algum modo que A1 = 00:30 ao invés de 1.00:30:00

Faço o acréscimo de 00:30 assim:
A1 = 19:00
A2 = 07:00
Msk_Minu3.Text = 00:30

A1 = A1 + TimeSpan.Parse(Msk_Minu3.Text)

Obrigado
LVFIOROT 14/11/2017 10:49:26
#477838
para compara horas de dias distintos é necessario a data!
JABA 14/11/2017 13:12:57
#477842
Se a diferença for sempre de um dia, então você pode fazer assim:

dotnetfiddle.net/KCZSjN

OBS: Repare que só sai do loop quando A1 fica maior do que A2
ELMO01 14/11/2017 21:24:44
#477856
Valeu pessoal pela ajuda
deu certo.

Obrigado
Tópico encerrado , respostas não são mais permitidas