Problema em trabalhar com hora e minuto!

4 respostas
Alana_Joyce

Seguinte…

o projeto é o seguinte…
um layout, com quatro contadores…

1 para o turno1 - 5:00 - 13:20

2 para o turno2 - 13:21 - 21:40

3 para o turno3 - 21:41 - 4:59

o quarto é o contador geral que incrementa de acordo com os outros 3 contadores… é a soma dos 3 primeiros…

eu tenho um timer para ficar verificando a hora e depois eu fiz isso…

de forma mais resumida… (não coloquei tudo oq ele executa quando dá tal hora…)


public void ajustaHorario()

{

gc = new GregorianCalendar();
frame.getJLabel1().setText(BGFrame.FORMATO.format(gc.getTime()));

	if((gc.get(GregorianCalendar.HOUR_OF_DAY) >= 05)&&(gc.get(GregorianCalendar.HOUR_OF_DAY) < 14))
	{
		if((gc.get(GregorianCalendar.HOUR_OF_DAY) == 13)&&(gc.get(GregorianCalendar.MINUTE) < 21))
		{
			if(!isManha)
			{
				contGiroN = Integer.toString(countnoite);...

}
		}
	}
	else
		if ((gc.get(GregorianCalendar.HOUR_OF_DAY) >= 13)&&(gc.get(GregorianCalendar.HOUR_OF_DAY) < 22))
		{
			if((gc.get(GregorianCalendar.HOUR_OF_DAY) == 21)&&(gc.get(GregorianCalendar.MINUTE) < 41))
			{
				if(!isTarde)
				{
					contGiroM = Integer...

}
			}
		}
		else 
			if ((gc.get(GregorianCalendar.HOUR_OF_DAY) >= 21)||(gc.get(GregorianCalendar.HOUR_OF_DAY) < 05))
			{
				if(!isNoite)
				{
					contGiroM ...


}

}

}

cada contador só deve incrementar (a partir da leitura de codigos de barra…) quando entrar no seu horário…


olha o q tá acontecendo:

para o turno1 - 5:00 - 13:20 - ele conta em 5:00 h mesmo, é o único q tá certo.

para o turno2 - 13:21 - 21:40 - ele só conta em 14:00.

para o turno3 - 21:41 - 4:59 - ele só conta em 22:00.


ou seja, o problema é com a contagem de minutos…

não sei mais onde mexer…

ALGUÉM PODE ME AJUDAR!!!

AGRADEÇO!!!

4 Respostas

Alana_Joyce
public void ajustaHorario()
{
gc = new GregorianCalendar();

frame.getJLabel1().setText(BGFrame.FORMATO.format(gc.getTime()));

if((gc.get(GregorianCalendar.HOUR_OF_DAY) >= 05)&&(gc.get(GregorianCalendar.HOUR_OF_DAY) < 14))
{
if((gc.get(GregorianCalendar.HOUR_OF_DAY) == 13)&&(gc.get(GregorianCalendar.MINUTE) < 21))
{
if(!isManha)
{
contGiroN = Integer.toString(countnoite);...

.........

}
}
}
else
if ((gc.get(GregorianCalendar.HOUR_OF_DAY) >= 13)&&(gc.get(GregorianCalendar.HOUR_OF_DAY) < 22))
{
if((gc.get(GregorianCalendar.HOUR_OF_DAY) == 21)&&(gc.get(GregorianCalendar.MINUTE) < 41))
{
if(!isTarde)
{
contGiroM = Integer...
.........

}
}
}
else
if ((gc.get(GregorianCalendar.HOUR_OF_DAY) >= 21)||(gc.get(GregorianCalendar.HOUR_OF_DAY) < 05))
{
if(!isNoite)
{
contGiroM ...

.......
}
}
}
ViniGodoy

Com Gregorian Calendar, vai ser MUITO difícil mesmo.

Sugiro que você baixe essa API e use, é muito, muito, muito, mais fácil:
http://joda-time.sourceforge.net/

Há exemplos de como usa-la no site.

Ela é tão importante que já está estão pensando em suporta-la oficialmente em futuras versões do Java.

T

Outro probleminha aí, se você realmente não puder usar a Joda-Time, é que sua comparação está completamente errada. Você definiu sua comparação como:

05:00 <= x <= 13:20 -> turno 1
13:21 <= x <= 21:40 -> turno 2
21:41 <= x <= 04:59 -> turno 3

Vamos modificar um pouco a comparação. Concorda comigo que a comparação a seguir é equivalente à sua?

00:00 <= x <= 04:59 -> turno 3
05:00 <= x <= 13:20 -> turno 1
13:21 <= x <= 21:40 -> turno 2
21:41 <= x <= 23:59 -> turno 3

Isto posto, vamos pensar em termos de minutos somente, porque você se atrapalhou toda com horas e minutos. Lembrando que uma hora tem 60 minutos, vamos pensar só em minutos:

0 minutos <= x <= 299 minutos -> turno 3
300 minutos <= x <= 800 minutos -> turno 1
801 minutos <= x <= 1300 minutos -> turno 2
1301 minutos <= x <= 1439 minutos -> turno 3

Acho que agora fica mais fácil. É só pegar o valor das horas, multiplicar por 60, somar com os minutos, e fazer as comparações acima.

Alana_Joyce

na verdade a comparação foi essa:

05:00 <= x <= 13:20 -> turno 1
13:21 <= x <= 21:40 -> turno 2
21:41 <= x OU x<= 04:59 -> turno 3

eu enxerguei que assim:

21:41 <= x <= 04:59 -> turno 3

não daria certo, pois um numero não pode ser maior que 21 e ao mesmo tempo ser menor que 4.

if ((gc.get(GregorianCalendar.HOUR_OF_DAY) >= 21)||(gc.get(GregorianCalendar.HOUR_OF_DAY) < 05)) { if(!isNoite)

eu coloquei um “||” aí…
e outra… ele só vai ler essa linha caso a condição para entrar nas outras linhas não dê certo.

por isso que a minha lógica não está errada.

Mas adorei sua sugestão para colocar as horas multiplicadas por 60 e somar ao valor dos minutos.
Vou tentar fazer isso aqui.

ViniGodoy, vou ler direitinho o site que você me mandou.

Qualquer coisa, falo aqui!
Obrigada, vocês dois!!

:smiley:

Criado 26 de fevereiro de 2008
Ultima resposta 27 de fev. de 2008
Respostas 4
Participantes 3