• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

rui_fernandes

[vb.net 2003] Subtrair data...

14 mensagens neste tópico

Boas...

gostava de uma pequena ajuda...

penso que isto e mt simples...

eu tendo em 2 textbox's 2 datas diferentes...

como e que eu as subtraiu?

tipo, (data1 - data2).

Cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes fazer algo do tipo


CDate(Textbox1.Text) - CDate(Textbox2.Text)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

primeiro convém verificar se é data ou nao, pois pode originar daqueles erros do debbuger do VB :thumbsup:


If Isdate(Textbox1.Text) = true and Isdate(Textbox2.Text) = true then
CDate(Textbox1.Text) - CDate(Textbox2.Text)
else
MsgBox("Introduza duas datas para poder subtrair!")
end if

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas...

da erro, diz que o formato DATE n pode utilizar esse operador... :/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se calhar vou tenh de subtrair dia, mes e dp ano....

o vb deve ter alg do genero para fazer esta operacao...

para data e para hora penso eu...  :eek:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas, estive a testar no meu visual studio e isto deu:

        Dim data As String
        If IsDate(txt1.Text) = True And IsDate(txt2.Text) = True Then
            txt1.Text = CDate(txt1.Text)
            txt2.Text = CDate(txt2.Text)

            data = (DateTime.Parse(txt1.Text) - DateTime.Parse(txt2.Text)).ToString()
            Label1.Text = data
        End If

o output é no formato dias.horas:minutos:segundos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens a certeza joao?

e que eu copiei o teu codigo, apenas alterei o nome ds textbox's e n funciona...

continua a dar o mesmo erro--> " Operator '-' is not defined for types 'Date' and 'Date' ".

n estas a importar alg biblioteca ou coisa do genero?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não, so usei o Vb. Net 2005 :S , só se for por aí ...

Edited: aconselho.te a fazeres o upgrade para o VS 2005 pois é muito melhor  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

com o datadiff() funciona perfeitamente..

mas so com datas.

e para horas???

CUMPS.

bgd.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@Tiago Salgado: não sabia que existia tal função, pois então, sugeri a minha opção que no VS 2005.Net funciona bem com Horas e minutos até, enquanto a solução que tu apresentaste, ao que parece (não testei), não o faz.

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá a todos,

Mais uma vez seja pelo mesmo problema ou simplesmente pelo tópico em aberto deixo aqui o meu contributo de como resolvi o mesmo problema e como sendo um código que irei precisar mais vezes criei a seguinte função:


Public Function retoma_horas(ByVal hora_inicio As String, ByVal hora_fim As String)
	Dim retoma_hora As String
	Dim a, b, c, d, minutos, horas As Integer
	a = Mid(hora_inicio, 1, 2)
	b = Mid(hora_inicio, 4, 2)
	c = Mid(hora_fim, 1, 2)
	d = Mid(hora_fim, 4, 2)

	If b > d Then
		minutos = b - d
		a = a + 1
		horas = c - a
	Else
		minutos = d - b
		horas = c - a
	End If
	retoma_hora = horas & ":" & minutos
	Return retoma_hora
End Function

Passo a explicar.

A função que criei recebe de duas textboxs um valor no formato "hh:mm" (hora), correspondente a uma hora de inicio e de fim. O objectivo será calcular a diferença entre a hora de fim e inicio, retomando o calculo no mesmo tipo.

Para testar a função posso introduzir os valores directamente na função como mostra o exemplo abaixo ou substituir por o conteudo de uma textbox ou algo do género.

As variáveis a, b, c, d representam o seguinte:

a -> horas iniciais

b -> minutos iniciais

c -> horas finais

d -> minutos finais

retoma_horas("12:30","16:00")  'A função deverá devolver "04:30",

Não sei se é o melhor método de calcular a diferença entre duas horas, mas à falta de melhor resolvi criar a minha própria função. Se alguém conhecer alguma função nativa do VB deixe aqui o seu contributo.

Obrigado

Editado por djbarbas
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A .NET lida tão bem com datas.

O esforço que deve ser feito é sempre tentar negociar os dados de forma a que consigas obter objectos DateTime.

Depois, o TimeSpan faz as contas por ti:

Dim TS As TimeSpan = DateTime.Parse("2012-07-25 21:40") - DateTime.Parse("2012-07-25 16:38")
Trace.Write(TS.Hours.ToString.PadLeft(2,"0") & ":" & TS.Minutes.ToString.PadLeft(2,"0"))

No trace, sai: 05:02

A precisão vai até ao tick.

Se deres só a hora ao Parse, ele resolve-te correctamente o DateTime.

TimeSpan já existe desde a .NET 1.1

Editado por ribeiro55
1

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora