Converter números para horas e minutos. (RESOLVIDO)

Problema:

Tenho um cadastro de máquinas e tenho uma programação de produção onde tenho que saber quanto tempo uma máquina vai levar para produzir uma determinada quantidade de um produto.

No cadastro da máquina eu tenho um número (Double) que diz quantas unidades a máquina produz por hora.

Vindo de outra parte do sistema (vem de um Orçamento) eu tenho uma quantidade (Double) total daquele produto que precisa ser produzida.

Com base nesses dois valores eu preciso saber quanto tempo a máquina vai levar para produzir aquela quantidade solicitada.

– Isso não é trabalho pra faculdade, é para o mundo real mesmo –

double capacidadeMaquinaHora = 1000.00; double quantidadeTotalProduzir = 3650.00;

No caso acima, se eu sei que a máquina produz 1000 folhas por hora e eu preciso produzir 3.650 folhas, se eu fizer:

double tempoProducao = quantidadeTotalProduzir / capacidadeMaquina;

Eu chego nisso:

double tempoProducao = 3.65;

Como eu faço para saber quanto dá isso em Hora e Minutos?
Preciso pegar isso em Hora/Minuto para somar a um Calendar que marca a data/hora de início da produção.

[code]Date dataInicio = (Date)campDataInicio.getValue();
Date horaInicio = (Date)campHoraInicio.getValue();

Calendar calHoraInicio = new GregorianCalendar();
calHoraInicio.setTimeInMillis(horaInicio.getTime());

Calendar calDataHoraInicio = new GregorianCalendar();
// colocar a data do inicio no calendario
calDataHoraInicio.setTimeInMillis(dataInicio.getTime());
// agora colocar a hora/minuto do inicio no calendario
calDataHoraInicio.set(Calendar.HOUR_OF_DAY, calHoraInicio.get(Calendar.HOUR_OF_DAY));
calDataHoraInicio.set(Calendar.MINUTE, calHoraInicio.get(Calendar.MINUTE));

// data e hora do inicio correta de acordo com o valor dos campos
Date dataHoraInicio = calDataHoraInicio.getTime();
[/code]
Agradeço qualquer ajuda (e obrigado se você teve paciência para ler tudo).

Transforma esse valor (3.6) em milisegundos e adiciona ao Date que o Calendar retorna.
Depois disso, tu vais ter a data/hora de previsão de conclusão.

Não sei se era isso que tu queria, mas espero ter ajudado.

Abraço.

Transforma esse valor (3.6) em milisegundos e adiciona ao Date que o Calendar retorna.
Depois disso, tu vais ter a data/hora de previsão de conclusão.

Não sei se era isso que tu queria, mas espero ter ajudado.

Abraço.

Não precisa usar Calendar, já que ele vai dar uns resultados esquisitos.

Em vez disso, faça algumas contas (1 hora = 60 minutos = 3600 segundos).

Algo neste estilo:

double d = 3.65;
// vamos converter para segundos primeiro, e arredondando um pouco para evitar alguns problemas esquisitos
long s  = Math.round (d * 3600);
// Agora vamos calcular horas, minutos e segundos
long h = s / 3600;
long m = (s - 3600 * h) / 60;
s = s % 60;

Veja se o que escrevi está certo.

Não tenho nem certeza se esse lógica está correta:

double tempoProducao = quantidadeTotalProduzir / capacidadeMaquina;

No case esse valor que retorna (3650 / 1000 = 3.65) o que seria? Minutos?

[quote=L.Bach]Transforma esse valor (3.6) em milisegundos e adiciona ao Date que o Calendar retorna.
Depois disso, tu vais ter a data/hora de previsão de conclusão.

Não sei se era isso que tu queria, mas espero ter ajudado.

Abraço.

[editado] deu delay aqui e a mensagem saiu duplicada [/editado][/quote]

É isso mesmo que tem de ser feito. Aquelas contalhadas que mostrei só servem para mostrar o valor da diferença, mas como você quer já o valor da previsão de término, o correto é usar a sugestão do L. Bach.

[quote=javer]Não tenho nem certeza se esse lógica está correta:

double tempoProducao = quantidadeTotalProduzir / capacidadeMaquina;

No case esse valor que retorna (3650 / 1000 = 3.65) o que seria? Minutos?
[/quote]

quantidadeTotalAProduzir = folhas
capacidadeMaquina = folhas por hora

Então o resultado é em folhas / (folhas / hora), ou seja, horas. De onde você tirou “minutos”?

OK?

[quote=thingol]Não precisa usar Calendar, já que ele vai dar uns resultados esquisitos.

Em vez disso, faça algumas contas (1 hora = 60 minutos = 3600 segundos).

Algo neste estilo:

double d = 3.65;
// vamos converter para segundos primeiro, e arredondando um pouco para evitar alguns problemas esquisitos
long s  = Math.round (d * 3600);
// Agora vamos calcular horas, minutos e segundos
long h = s / 3600;
long m = (s - 3600 * h) / 60;
s = s % 60;

Veja se o que escrevi está certo.[/quote]

Perfeito, com seu código eu cheguei em:

Hora....: 3 Minuto..: 39 Segundos: 0

Agora tenho um Calendar (com data e hora informada pelo usuário) com a data e hora de início da produção:
Hora da de inicio: 21/01/2009 19:18

Calendar calDataHoraInicio = new GregorianCalendar(); // colocar a data do inicio no calendario calDataHoraInicio.setTimeInMillis(dataInicio.getTime());

Como faço para adicionar essas 3 horas e esses 39 minutos a esse calDataHoraInicio?

calDataHoraInicio.add(Calendar.HOUR_OF_DAY, 3); calDataHoraInicio.add(Calendar.MINUTE, 39);

Quero agradecer a todos os amigos que tentaram (e que conseguiram) me ajudar.
Cheguei no resultado que eu precisa com a ajuda de todas as respostas, especialmente do L. Bach e Bruno Laturner

[code]Capacidade da maquina…: 1000.0
Total a produzir…: 3650.0
Data/Hora de inicio da producao: 21/01/2009 19:51
– Tempo necessario
Hora…: 3
Minuto…: 39
Segundos: 0
Data/Hora de previsao termino…: 21/01/2009 23:30

[/code]

Obrigado a todos

Só uma dica a mais:

Use o Joda Time e seja feliz.

http://joda-time.sourceforge.net/