PRECISO DE AJUDA CONTAS DE HORAS
Citação::
NICKOSOFT este que é o problema como ampliar o esquema de conversão pra englobar dia, ai é que estou com problemas já tentei fazer de alguns modos mais não deu certo.
da trabalho, mas vai sem problemas, parta da menor unidade q precisa no caso minuto.....
tipo se o calculo do datediff retornar 2200 minuntos....ai vc pode usar muitas logicas, dividir isso em 60 retorna horas, esse valor se for maior q 24, é sinal q tem mais de 1 dia, vc divide por 24, da 1,527...pronto, vc tem 1 dia, e agora essa parte decimal, multiplicada por 24, dará 12, já temos 1 dia e 12 horas, a parte decimal restante multiplica por 60, 40 minutos.....1dia 12horas e 40minutos....
mas sinceramente é muito trabalho, a sugestão do kerplunk te poupa muito disso.....vc tem coisas prontas q te poupam horas de logica....essa conversão q fiz assim, tem N formas de serem feitas....vc fez de horas pra chegar aos minutos, nada impede q vc parta de dias pra minutos tmb, o sentido inverso da minha conversão, pode até ter contas a menos a serem feitas....
Pessoal fiz esta função abaixo:
Public Periodo As TimeSpan
Function Cal_Horas2(Data As Date, ByVal Entrada As DateTime, ByVal Saida As DateTime) As DateTime
If Entrada >= #10:00:00 PM# And Entrada <= #5:00:00 AM# Then
[ô]*
[ô]* Noite
[ô]* Horário noturno compreende de 22:00 as 05:00 da manhã do dia seguinte
[ô]*
Entrada = New DateTime(Mid(Data, 7), Mid(Data, 4, 2), Mid(Data, 1, 2), Mid(Entrada, 1, 2), Mid(Entrada, 4, 2), 0)
Dim DataNew As Date = DateAdd(DateInterval.Day, 1, Data)
Saida = New DateTime(Mid( DataNew, 7), Mid( DataNew, 4, 2), Mid( DataNew, 1, 2), Mid(Saida, 1, 2), Mid(Saida, 4, 2), 0)
Periodo = Saida - Entrada
Else
[ô]*
[ô]* Dia
[ô]*
Entrada = New DateTime(Mid(Data, 7), Mid(Data, 4, 2), Mid(Data, 1, 2), Mid(Entrada, 1, 2), Mid(Entrada, 4, 2), 0)
Saida = New DateTime(Mid(Data, 7), Mid(Data, 4, 2), Mid(Data, 1, 2), Mid(Saida, 1, 2), Mid(Saida, 4, 2), 0)
Periodo = Saida - Entrada
End If
Return Periodo
End Function
Mais esta função me retorna um erro que não estou conseguindo retirar
Return Periodo -> Erro 1 Valor de tipo [ô]System.TimeSpan[ô] não pode ser convertido para [ô]Date[ô].
Como faço para acertar este erro ai?
Public Periodo As TimeSpan
Function Cal_Horas2(Data As Date, ByVal Entrada As DateTime, ByVal Saida As DateTime) As DateTime
If Entrada >= #10:00:00 PM# And Entrada <= #5:00:00 AM# Then
[ô]*
[ô]* Noite
[ô]* Horário noturno compreende de 22:00 as 05:00 da manhã do dia seguinte
[ô]*
Entrada = New DateTime(Mid(Data, 7), Mid(Data, 4, 2), Mid(Data, 1, 2), Mid(Entrada, 1, 2), Mid(Entrada, 4, 2), 0)
Dim DataNew As Date = DateAdd(DateInterval.Day, 1, Data)
Saida = New DateTime(Mid( DataNew, 7), Mid( DataNew, 4, 2), Mid( DataNew, 1, 2), Mid(Saida, 1, 2), Mid(Saida, 4, 2), 0)
Periodo = Saida - Entrada
Else
[ô]*
[ô]* Dia
[ô]*
Entrada = New DateTime(Mid(Data, 7), Mid(Data, 4, 2), Mid(Data, 1, 2), Mid(Entrada, 1, 2), Mid(Entrada, 4, 2), 0)
Saida = New DateTime(Mid(Data, 7), Mid(Data, 4, 2), Mid(Data, 1, 2), Mid(Saida, 1, 2), Mid(Saida, 4, 2), 0)
Periodo = Saida - Entrada
End If
Return Periodo
End Function
Mais esta função me retorna um erro que não estou conseguindo retirar
Return Periodo -> Erro 1 Valor de tipo [ô]System.TimeSpan[ô] não pode ser convertido para [ô]Date[ô].
Como faço para acertar este erro ai?
Converta o tipo de retorno da sua função para um TimeSpan em vez de DateTime.
OBS: você pode fazer cálculos com hora sem usar essas funções aÃ.
Function Cal_Horas2(Data As Date, ByVal Entrada As DateTime, ByVal Saida As DateTime) As [txt-color=#e80000]TimeSpan [/txt-color]
OBS: você pode fazer cálculos com hora sem usar essas funções aÃ.
cara, já foi dito o jeito menos errado de se fazer, mas já q vc quer reinventar a roda, sua questão é apenas a logica, q vc quer, mas não consegue pensar......
entrada 05/10/2010 08:30:00
saÃda 06/10/2010 17:59:00
messagebox dia1 horas 9:29
Function CalcExtNot(ByVal entrada As DateTime, ByVal saida As DateTime) As String
Dim dblDia As Double
Dim dblHora As Double
Dim dblMinutos As Double
Dim dblTemp As Double
dblTemp = DateDiff(DateInterval.Minute, entrada, saida)
dblDia = CLng((dblTemp / 60) / 24)
dblHora = CLng(dblTemp / 60) - (24 * dblDia)
dblMinutos = dblTemp - ((dblHora * 60) + (24 * dblDia) * 60)
If dblMinutos < 0 Then
dblMinutos = dblMinutos * -1
End If
Return [Ô]Dia [Ô] & CStr(dblDia) & [Ô]- Horas [Ô] & CStr(dblHora) & [Ô]:[Ô] & CStr(dblMinutos)
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MessageBox.Show(CalcExtNot(CDate(TextBox1.Text), CDate(TextBox2.Text)))
End Sub
entrada 05/10/2010 08:30:00
saÃda 06/10/2010 17:59:00
messagebox dia1 horas 9:29
Pessoal a função final ficou desta forma
Public Periodo As TimeSpan
Function Cal_Horas2(Data As Date, ByVal Entrada As DateTime, ByVal Saida As DateTime) As TimeSpan
If Entrada >= #10:00:00 PM# Or Saida <= #5:00:00 AM# Then
[ô]*
[ô]* Noite
[ô]*
Entrada = New DateTime(Mid(Data, 7), Mid(Data, 4, 2), Mid(Data, 1, 2), Mid(Entrada, 1, 2), Mid(Entrada, 4, 2), 0)
Dim DataNew As Date = DateAdd(DateInterval.Day, 1, Data)
Saida = New DateTime(Mid(DataNew, 7), Mid(DataNew, 4, 2), Mid(DataNew, 1, 2), Mid(Saida, 1, 2), Mid(Saida, 4, 2), 0)
Periodo = Saida - Entrada
Else
[ô]*
[ô]* Dia
[ô]*
Entrada = New DateTime(Mid(Data, 7), Mid(Data, 4, 2), Mid(Data, 1, 2), Mid(Entrada, 1, 2), Mid(Entrada, 4, 2), 0)
Saida = New DateTime(Mid(Data, 7), Mid(Data, 4, 2), Mid(Data, 1, 2), Mid(Saida, 1, 2), Mid(Saida, 4, 2), 0)
Periodo = Saida - Entrada
End If
Return Periodo
End Function
Espero que sirva para outras pessoas que estão com o mesmo problema.
Agradeço a todos que me ajudou a fazer a função.
Public Periodo As TimeSpan
Function Cal_Horas2(Data As Date, ByVal Entrada As DateTime, ByVal Saida As DateTime) As TimeSpan
If Entrada >= #10:00:00 PM# Or Saida <= #5:00:00 AM# Then
[ô]*
[ô]* Noite
[ô]*
Entrada = New DateTime(Mid(Data, 7), Mid(Data, 4, 2), Mid(Data, 1, 2), Mid(Entrada, 1, 2), Mid(Entrada, 4, 2), 0)
Dim DataNew As Date = DateAdd(DateInterval.Day, 1, Data)
Saida = New DateTime(Mid(DataNew, 7), Mid(DataNew, 4, 2), Mid(DataNew, 1, 2), Mid(Saida, 1, 2), Mid(Saida, 4, 2), 0)
Periodo = Saida - Entrada
Else
[ô]*
[ô]* Dia
[ô]*
Entrada = New DateTime(Mid(Data, 7), Mid(Data, 4, 2), Mid(Data, 1, 2), Mid(Entrada, 1, 2), Mid(Entrada, 4, 2), 0)
Saida = New DateTime(Mid(Data, 7), Mid(Data, 4, 2), Mid(Data, 1, 2), Mid(Saida, 1, 2), Mid(Saida, 4, 2), 0)
Periodo = Saida - Entrada
End If
Return Periodo
End Function
Espero que sirva para outras pessoas que estão com o mesmo problema.
Agradeço a todos que me ajudou a fazer a função.
Tópico encerrado , respostas não são mais permitidas