Não é tão simples assim não colega.
procura primeiro no google como transformar string to date, vai achar um post do guj, converte as 2 strings
*SimpleDateFormat
depois vc pegas as 2 datas
data1.compareTo(date2)
simples
respondendo ao colega
sim, é muito simples
[code]public boolean verificavencimento(Date emissao, Date vencimento){
boolean data;
if (emissao.before(vencimento)){
data = true;
}
else if (emissao.after(vencimento))
data = false;
else
data = true;
return data;
}
[/code]
Não é tão simples assim não colega.[/quote]
Não? Para o caso concreto até é melhor o after, mas poderia usar o compareTo.
String a = "20120401";
String b = "20120331";
DateFormat df = new SimpleDateFormat("yyyyMMdd");
//Converte para Date
Date dateA = df.parse(a);
Date dateB = df.parse(b);
//Adiciona 1 dia a B
Calendar calB = Calendar.getInstance();
calB.setTime(dateB);
calB.add(Calendar.DAY_OF_MONTH, 1);
dateB = calB.getTime();
//Compara
System.out.println("A depois de B+1? " + dateA.after(dateB));
[quote=eduJava]respondendo ao colega
sim, é muito simples[/quote]
Ok, não vou nem sequer entrar em discussão. Só te digo que a manipulação de datas em java é tão precária que foi levantada a hipótese de adicionar o Joda Time como nativo do JDK e foi aberto uma task na lista de discussão do Java tratando exclusivamente do assunto . Depois, em casa, com tempo, procuro a task e posto aqui.
Other Sample.
public static void main(String[] args) throws ParseException {
String a = "20120401";
String b = "20120331";
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
Date data1 = new Date(format.parse(a).getTime());
Date data2 = new Date(format.parse(b).getTime());
if(data1.after(data2)){
System.out.println("Data: " + a + " é posterior à " + b);
}else if(data1.before(data2)){
System.out.println("Data: " + a + " é inferior à " + b);
}else{
System.out.println("Data: " + a + " é igual à " + b);
}
}
Via de regra, você deve usar as classes para manipulação de datas para esse tipo de cálculo.
Para este caso, como a data está no formato AAAAMMDD, você pode simplesmente transformar a string em long.
O maior valor será posterior.
Não é tão simples assim não colega.[/quote]
Não? Para o caso concreto até é melhor o after, mas poderia usar o compareTo.
String a = "20120401";
String b = "20120331";
DateFormat df = new SimpleDateFormat("yyyyMMdd");
//Converte para Date
Date dateA = df.parse(a);
Date dateB = df.parse(b);
//Adiciona 1 dia a B
Calendar calB = Calendar.getInstance();
calB.setTime(dateB);
calB.add(Calendar.DAY_OF_MONTH, 1);
dateB = calB.getTime();
//Compara
System.out.println("A depois de B+1? " + dateA.after(dateB));
[/quote]
Para esse caso sim, concordo . Se ele quiser ver somente se uma data é antes ou depois, ok, use assim, me refiro que a manipulação de datas no Java não é algo trivial, só isso.
[quote=AbelBueno]Via de regra, você deve usar as classes para manipulação de datas para esse tipo de cálculo.
Para este caso, como a data está no formato AAAAMMDD, você pode simplesmente transformar a string em long.
O maior valor será posterior.[/quote]
Neste caso, o problema é que eu preciso acrescentar um ou mais dias em uma das datas e aí o cálculo dá errado.
Por exemplo, supondo que a variável B tenha o conteúdo “20120331”. Transformando-a em long seria 20120331.
Eu preciso saber se a data contida na variável A é posterior à data B mais um dia. Como?
Não é tão simples assim não colega.[/quote]
Não? Para o caso concreto até é melhor o after, mas poderia usar o compareTo.
String a = "20120401";
String b = "20120331";
DateFormat df = new SimpleDateFormat("yyyyMMdd");
//Converte para Date
Date dateA = df.parse(a);
Date dateB = df.parse(b);
//Adiciona 1 dia a B
Calendar calB = Calendar.getInstance();
calB.setTime(dateB);
calB.add(Calendar.DAY_OF_MONTH, 1);
dateB = calB.getTime();
//Compara
System.out.println("A depois de B+1? " + dateA.after(dateB));
[/quote]
Parece que o melhor caminho é esse.
Em calB.add(Calendar.DAY_OF_MONTH, 1) eu estou acrescentando um dia à data calB?
Para esse caso sim, concordo
o cara ta querendo aprender um negócio simples e vc(nel) ja vem com um turbilhao de coisa e falando q não é fácil e tal, algo de 3 linhas
pra um cara q tem quase 3 mil msgs, acho que não precisa disso neh
[quote=andredf][quote=AbelBueno]Via de regra, você deve usar as classes para manipulação de datas para esse tipo de cálculo.
Para este caso, como a data está no formato AAAAMMDD, você pode simplesmente transformar a string em long.
O maior valor será posterior.[/quote]
Neste caso, o problema é que eu preciso acrescentar um ou mais dias em uma das datas e aí o cálculo dá errado.
Por exemplo, supondo que a variável B tenha o conteúdo "20120331". Transformando-a em long seria 20120331.
Eu preciso saber se a data contida na variável A é posterior à data B mais um dia. Como?
[/quote]
Olá, André!
Pra vc comparar datas é só fazer como foi sugerido. Se vc transformar a data (YYYYMMDD) em long funciona assim:
String data1 = "20120331";
String data2 = "20120401";
if (Long.parseLong(data1) > Long.parseLong(data2)) {
System.out.println("Data 1 é maior");
} else if (Long.parseLong(data1) < Long.parseLong(data2)) {
System.out.println("Data 2 é maior");
} else {
System.out.println("São iguais");
}
Agora, se vc quiser fazer cálculos com datas, acredito que se vc usar a classe GregorianCalendar vai funcionar.
Ex.:
int year = 2012;
int month = 3;
int day = 31;
GregorianCalendar g = new GregorianCalendar(year, month, day);
g.add(Calendar.DAY, 1); //adiciona 1 dia ao GregorianCalendar
System.out.println(g.get(Calendar.DAY));
Espero ter ajudado!
[quote=eliangela][quote=andredf][quote=AbelBueno]Via de regra, você deve usar as classes para manipulação de datas para esse tipo de cálculo.
Para este caso, como a data está no formato AAAAMMDD, você pode simplesmente transformar a string em long.
O maior valor será posterior.[/quote]
Neste caso, o problema é que eu preciso acrescentar um ou mais dias em uma das datas e aí o cálculo dá errado.
Por exemplo, supondo que a variável B tenha o conteúdo "20120331". Transformando-a em long seria 20120331.
Eu preciso saber se a data contida na variável A é posterior à data B mais um dia. Como?
[/quote]
Olá, André!
Pra vc comparar datas é só fazer como foi sugerido. Se vc transformar a data (YYYYMMDD) em long funciona assim:
String data1 = "20120331";
String data2 = "20120401";
if (Long.parseLong(data1) > Long.parseLong(data2)) {
System.out.println("Data 1 é maior");
} else if (Long.parseLong(data1) < Long.parseLong(data2)) {
System.out.println("Data 2 é maior");
} else {
System.out.println("São iguais");
}
[/quote]
Cara eliangela, para o meu propósito, transformar as datas em long não funciona, pois quase sempre preciso comparar uma das datas com a outra data acrescentando ao menos um dia.
Se eu somar 1 à variável long com conteúdo 20120331, o seu conteúdo mudará para 20120332 e não para 20120401 (primeiro dia do mês seguinte), como seria o desejado.
[quote]
Agora, se vc quiser fazer cálculos com datas, acredito que se vc usar a classe GregorianCalendar vai funcionar.
Ex.:
int year = 2012;
int month = 3;
int day = 31;
GregorianCalendar g = new GregorianCalendar(year, month, day);
g.add(Calendar.DAY, 1); //adiciona 1 dia ao GregorianCalendar
System.out.println(g.get(Calendar.DAY));
Talvez esse sim funcione, mas precisarei “quebrar” a data que consta numa variável string (no formato AAAAMMDD) em três partes.
Obrigado a todos que estão me ajudando.
Espero ter ajudado![/quote]
Andre, você já sabe converter String para data ??? (1)
Se não, aprenda isso primeiro. Com a variável do tipo Date em mãos, passamos para a próxima etapa, que é calcular + 1 na data B (2). Com esse cálculo efetuado, você pode usar os métodos before() e after() de Date pra saber se uma data é anterior ou posterior a outra (3).
Todos os 3 passos você pode achar no Google de forma isoladas. O importante nesse caso é você separar responsabilidades de forma que seus métodos possam ser utilizados posteriormente para outros fins.
Eu criaria uma classe DateUtils só para realizar cada 1 dos passos de forma que um método que faz exatamente o que você quer, reaproveitando os 3 passos e passando as 2 datas, seria meu primeiro pensamento. Poderia mudar isso depois em um posterior refactor, mas em um primeiro momento seguiria essa linha de raciocínio.
Abs [] e qualquer dúvida, posta aí.
[quote=adriano_si]Andre, você já sabe converter String para data ??? (1)
Se não, aprenda isso primeiro. Com a variável do tipo Date em mãos, passamos para a próxima etapa, que é calcular + 1 na data B (2). Com esse cálculo efetuado, você pode usar os métodos before() e after() de Date pra saber se uma data é anterior ou posterior a outra (3).
Todos os 3 passos você pode achar no Google de forma isoladas. O importante nesse caso é você separar responsabilidades de forma que seus métodos possam ser utilizados posteriormente para outros fins.
Eu criaria uma classe DateUtils só para realizar cada 1 dos passos de forma que um método que faz exatamente o que você quer, reaproveitando os 3 passos e passando as 2 datas, seria meu primeiro pensamento. Poderia mudar isso depois em um posterior refactor, mas em um primeiro momento seguiria essa linha de raciocínio.
Abs [] e qualquer dúvida, posta aí.[/quote]
Olá, adriano.
Eu consegui converter a string para date e consegui também efetuar o acréscimo de um dia e fazer a comparação.
Está funcionando como o esperado.
Agora, porém, há outra dúvida.
Há uma data inicial (DI) e uma data final (DF).
A data final é acrescida de um dia. Ok! Com a ajuda dos colegas neste tópico, isso já está sendo feito com o método add. Portanto fazer DF + 1 é tranquilo.
Há uma terceira data (DT) que precisa ser verificada se está no período compreendido entre a (DI - 1) e (DF + 1).
A dúvida é como diminuir em 1 dia a data inicial, ou seja, como fazer (DI - 1)?
Há algum método que diminua uma data em X dias passados como parâmetro?
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -1);
[quote=digaoneves]
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -1);
[/quote]
Se é simples assim, maravilha!
Fechou!
Vou testar.
pode usar o date assim tb.
[code] final static int miliSegsPorDia = 1000 * 60 * 60 * 24;
public static Date IncDay(Date d, int dias){
return new Date(d.getTime() + miliSegsPorDia * dias);
}
[/code]
exemplo de uso:
[code]
date = format.parse(“20120331”);
Date date2 = IncDay(date, 1);
[/code]
[quote=andredf][quote=digaoneves]
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -1);
[/quote]
Se é simples assim, maravilha!
Fechou!
Vou testar.
[/quote]
Opa Andre, parece que conseguiu resolver. Entenda que oi addCalendar() da classe calendar, como próprio nome diz, adiciona o valor do segundo parametro Ao objeto de onde ele está sendo chamado.
Logo a matemática é fácil e simples, basta fazer o jogo de sinais. Qualquer valor positivo somado a um negativo fará você inverter o sinal.
Quando dizemos 2 + (-1) é a mesma coisa que dizer 2 - 1.
Abs []