Boa tarde!!
Gostaria de saber como fazer subtração de data no java, tentei achar alguma função no Calendar, mas não tive sucesso!
grato!
Boa tarde!!
Gostaria de saber como fazer subtração de data no java, tentei achar alguma função no Calendar, mas não tive sucesso!
grato!
[code]Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime()); // data de hoje
calendar.add(Calendar.DAY_OF_WEEK, -1); // tirando 1 dia
System.out.println(calendar.getTime()); // data de ontem[/code]
Você também pode dar uma olhadinha no framework “[google]JODA-TIME[/google]” mas ou usa um ou usa outro, se misturar vira porcaria. Joda time tbm é um bom exemplo para estudar sobre [google]fluent interfaces[/google]. Bem interessante !
Como assim subtração de datas?
Ter uma data inicial, uma final e retorna a diferença (em dias) entre elas?
[quote=vtr.oliveira]Como assim subtração de datas?
Ter uma data inicial, uma final e retorna a diferença (em dias) entre elas?[/quote]
Isso seria obter o periodo entre duas datas.
Subtração de datas é ter uma data menos outra data. A diferença pode ser em diminuir um ano, mes, dia, uma hora, um minuto, etc.
pega as duas datas…
dia ano e mês e transforma em dias… e subtrai…vai te retornar o numero de dias entre elas…
Talvez isso te ajude a ter uma luz…
public static Date getDiferencaData(Date dtInicial, Date dtFinal) {
//Convertendo as datas para milisegundos
long milisecondBegin = dtInicial.getTime();
long milisecondEnd = dtFinal.getTime();
//Subtraindo os milisegundos, para obter a diferença
long milisecondResult = milisecondBegin - milisecondEnd;
return new Date(milisecondResult);
}
Pessoal, muito obrigado pelas respostas. Realmente eu poderia transformar a hora em minutos e os segundos em minutos e calcular, mas eu queria ver primeiro se não tem nenhum método que faria isso retornando a subtração!
O que o victor falou pode funcionar, vou testar e falo se deu certo:
[quote]view plaincopy to clipboardprint?
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime()); // data de hoje
calendar.add(Calendar.DAY_OF_WEEK, -1); // tirando 1 dia
System.out.println(calendar.getTime()); // data de ontem [/quote]
valeu!
O melhor jeito mesmo, é passar o tempo para uma base só, como o segundos e depois subtrair, eu estava querendo fazer a subtração para fazer a relação do tamanho de um pacote e o tempo que ele levava para percorrer um caminho.
valeu pela ajuda galera!
Olá ThiagoWorldCoder ,
Cara, vou quebrar seu galho, ralei muito uma época para fazer este calculo, foram vários dias de pesquisa, até que fui pegando a lógica de como funciona e montei um método, segue abaixo o método …
primeiro tem que importar uns pacotes,
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Date;
public static int calcula2(String dia1, String dia2){
DateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");
Date data3= null;
Date data4 = null;
long m1 = 0;
long m2 = 0;
try{
data3 = (Date) fmt.parse(dia1);
data4 = (Date) fmt.parse(dia2);
}
catch(Exception e){}
Calendar data1 = new GregorianCalendar();
data1.setTime(data3);
Calendar data2 = new GregorianCalendar();
data2.setTime(data4);
m1 = data1.getTimeInMillis();
m2 = data2.getTimeInMillis();
return (int) ((m2 - m1) / (24*60*60*1000));
}
Espero ter ajudado, observe os parametros do método …
Generosamente,
Frid
Olá!
Aproveitando a discussão, gostaria de saber se já existe um método implementado que retorne o número de meses entre
duas datas.
Abraço!
Olá mais uma vez!!!
Por não encontrar um método próprio da API fiz a implementação na mão
GregorianCalendar dataInicio = proposta.getDataInicioProjeto();
GregorianCalendar dataTermino = proposta.getDataFimProjeto();
long inicio = dataInicio.getTimeInMillis();
long fim = dataTermino.getTimeInMillis();
long intervalo = fim - inicio;
int duracaoProjeto = (int)(intervalo / (1000 * 60 * 60 * 24 * 30)); // resultado em meses
Colocando as datas de inicio como 30/10/2008 e fim como 30/11/2008 obtive a resposta -1.
Alguém pode dizer qual foi o erro cometido?
Abraço!
Kara, fiz uma gambis aqui, mas tá funcionando tranquilão…
[code]public class Main {
public static void main(String[] args) {
new Main();
}
Main() {
Calendar dataInicial = Calendar.getInstance();
Calendar dataFinal = Calendar.getInstance();
dataFinal.add(Calendar.YEAR, 2);
dataFinal.add(Calendar.MONTH, 3);
int quantidadeDeMeses = 0;
if (dataInicial.get(Calendar.YEAR) < dataFinal.get(Calendar.YEAR)) {
quantidadeDeMeses = 12 * (dataFinal.get(Calendar.YEAR) - dataInicial.get(Calendar.YEAR));
if (dataInicial.get(Calendar.MONTH) > dataFinal.get(Calendar.MONTH)) {
quantidadeDeMeses += (dataInicial.get(Calendar.MONTH) - dataFinal.get(Calendar.MONTH));
}
}
if (dataInicial.get(Calendar.MONTH) < dataFinal.get(Calendar.MONTH)) {
quantidadeDeMeses += (dataFinal.get(Calendar.MONTH) - dataInicial.get(Calendar.MONTH));
}
System.out.println(quantidadeDeMeses);
}
}[/code]
huahuahuahu
Se servir… rsrsrs
Falows