Exibir data (dd/mm/aaaa)

Criei um metodo displayDate para exibir o dia, mes e ano separados por barras normais:
public void displayDate( int dtDate )
{
dtDate = ((datDia)/(datMes)/(datAno));
}

ele compila, porém na hora de executar aparece o seguinte erro:

[quote]C:>java DateTest
Digite o dia: 12
Digite o mes: 10
Digite o ano: 1949

A data correta e: 0Exception in thread “main” java.util.MissingFormatArgumentExc
eption: Format specifier ‘d’
at java.util.Formatter.format(Formatter.java:2429)
at java.io.PrintStream.format(PrintStream.java:899)
at java.io.PrintStream.printf(PrintStream.java:800)
at DateTest.main(DateTest.java:29)[/quote]
aonde está o erro?
e como faço para solicionar?[/quote]

Pra te falar a verdade, não entendi absolutamente nada do que esse metodo seu está fazendo… qual foi sua intenção colocando essas barras entre as variaveis? E porque atribuiu o “resultado” à variavel dtDate sendo que você não faz mais nada com ela abaixo? E afinal, o que significa a variavel dtDate?

Se o que você quer é mostrar a data como uma String formatada, dê uma olhada na classe SimpleDateFormat e use a classe Date para representar datas.

:wink:

kra não recomendo o uso da classe Date vc pode reparar que tem muito metodo deprecado(deprecated) na documentação da classe use a classe Calendar e como no post anterior não entendi muito o objetivo disso. Uma metodo q recebe um valor inteiro e atribui a mesma variavel q recebeu??? Explique-se melhor.

Esqueleto

Vou explicar melhor:
preciso criar uma classe Date que tenha 3 variáveis de instancia:
mês, dia e ano (todas tipo int), essa classe deve ter um construtor que inicializa as 3 variaveis de instancia.
Fazer um metodo set e um get para cada variavel de instancia.
Fazer um metodo displayDate (citado abaixo) que exiba o mes, dia e ano separados por barras normais (/); e por fim uma classe DateTest para testar a classe Date.

Vou colar as duas classes:

[quote] public class Date
{
private int datDia;
private int datMes;
private int datAno;
private int dtDate;

public Date( int dia, int mes, int ano )
{
	datDia = dia;
	datMes = mes;
	datAno = ano;
}

public void setDatDia( int dia )
{
	datDia = dia;
}

public void setDatMes( int mes )
{
	datMes = mes;
}

public void setDatAno( int ano )
{
	datAno = ano;
}

public int getDatDia()
{
	return datDia;
}

public int getDatMes()
{
	return datMes;
}

public int getDatAno()
{
	return datAno;
}

public void displayDate( int dtDate )
{
	dtDate = ((datDia)/(datMes)/(datAno));
}

public int getDisplayDate()
{
	return dtDate;
}

}[/quote]

[quote] import java.util.Scanner;

public class DateTest
{

public static void main( String args[] )
{
	
	int dtDia;
	int dtMes;
	int dtAno;

	Date date = new Date( 12, 02, 2006 );

	Scanner input = new Scanner( System.in );

	System.out.print( "Digite o dia: " );
	dtDia = input.nextInt();
	System.out.print( "Digite o mes: " );
	dtMes = input.nextInt();
	System.out.print( "Digite o ano: " );
	dtAno = input.nextInt();
	//date.displayDate( dtDia, dtMes, dtAno );

	date.setDatDia( date.getDatDia() );
	date.setDatMes( date.getDatMes() );
	date.setDatAno( date.getDatAno() );

	System.out.printf( "\nA data correta e: %d%d%d\n", dtDia/dtMes/dtAno ); 


}

}[/quote]

Não seria isso?

public String displayDate(){ return datDia+"/"+datMes+"/"+datAno; }

Na realidade a classe Date em si não está marcada como deprecated, e ainda é a classe recomendada para representação de datas, os métodos deprecated da classe são devidos as duas funcionalidades que ela tinha inicialmente, de manipular os campos da data individualmente e de formatar a data, essa duas funcionalidades foram transferidas para a classe Calendar e DateFormat, mas somente essas duas funcionalidades, não a de representar a data, o que não é a função de Calendar.

:wink:

Não seria isto aqui:

System.out.printf( "\nA data correta e: %d/%d/%d\n", dtDia,dtMes,dtAno); 

Qualquer coisa confere aqui.

T+

apareceu o seguinte erro:

[quote]

C:>java DateTest

A data correta e: 12/2/2006 Exception in thread “main” java.util.MissingFormatArgumentException: Format specifier ‘s’
at java.util.Formatter.format(Formatter.java:2429)
at java.io.PrintStream.format(PrintStream.java:899)
at java.io.PrintStream.printf(PrintStream.java:800)
at DateTest.main(DateTest.java:9)[/quote]

seria o erro causado pela declaração int das variáveis datDia, datMes e datAno?

alguem sabe???

vc fez alguma das alterações sugeridas pelo pessoal???

posta seu codigo atual…

pq no anterior, o seu metodo displayDate() noa vai funcionar nunca…

soh um toque, o java ja possui a classe Date, mude o nome da sua classe…

ai vai o código atual
class Date

[quote]public class Date
{
private int datDia;
private int datMes;
private int datAno;

public Date( int dia, int mes, int ano ) 
{ 
	datDia = dia;	 
	datMes = mes; 	
	datAno = ano; 
} 

public void setDatDia( int dia ) 
{ 
	datDia = dia; 
} 

public void setDatMes( int mes ) 
{ 
	datMes = mes; 
} 

public void setDatAno( int ano ) 
{ 
	datAno = ano; 
} 

public int getDatDia() 
{ 
	return datDia; 
} 

public int getDatMes() 
{ 
	return datMes; 
} 

public int getDatAno() 
{ 
	return datAno; 
} 

public String displayDate()
{ 
	return datDia+"/"+datMes+"/"+datAno; 
}

}[/quote]

class DateTest

[quote]public class DateTest
{

public static void main( String args[] ) 
{ 
	
	Date date = new Date( 12, 02, 2006 ); 

	System.out.printf( "\nA data correta e: %s %s %s\n", date.displayDate() ); 

} 

}[/quote]

é um exercicio de um livro, ele pede pra criar as classes…

troque

 System.out.printf( "\nA data correta e: %s %s %s\n", date.displayDate() ); 

em Java2

System.out.println( "A data correta e: "+date.displayDate() );

eu aqui não tenho o Java5 pra poder testar o seu printf, mas o lance eh q vc esta tentando mostrar 3 String usando %s 3 vezes…porem o seu metodo displayDate() soh retorna 1 String…raciocinando dessa forma o q vc pode tentar tb eh:

 System.out.printf( "\nA data correta e: %s\n", date.displayDate() ); 

lembrando q isso eu nao consigo testar aqui, mas pelo seu erro, deve funcionar…

funcionou, usei o último código.
obrigado!