Duvida SimpleDateFormat e Calendar

Olá pessoal, estou tentando aprender JAVA com JSF + Hibernate + JSP.
No meu Cadastro de Cliente, eu tenho um campo Data do Cadastro, que gostaria que fica-se a data em que o cadastro foi feito,
atribuido pelo sistema, pegando a data e hora do sistema.
E que essa data fosse visualizada na pagina e não pude-se ser alterada pelo usuario.
Eu tentei de varias formas mais estou encontrando dificuldade em usar o SimpleDateFormat e exibir os dados como Data, para
facilitar sua posterir persistencia no banco.
Segue o Codigo com o problema.

@Temporal(TemporalType.TIMESTAMP)
@Column(name="dtcadastro_cli", nullable=false)
private Calendar dataCadastro = hoje(); 

private Calendar hoje() {
	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
	Calendar dataHoje = new Calendar(sdf.format(data));                        -> Erro pois o SDF retorna uma String, qria transformar em Calendar
	return dataHoje;
}

o JSP tah assim o campo

<tr>	    
   <td><h:outputText value="Data do Cadastro"/></td>
   <td><h:inputText id="dtacadastro" readonly="true" value="#{clienteHandler.cliente.dataCadastro}"/></td>
</tr>

Eu escrevi umas classes com métodos static para tratar de formatos de datas, espero que ajude.

[code]public enum CalendarPattern {
DATE_TIME_PATTERN {
String getPattern() {
return “dd/MM/yyyy HH:mm:ss”;
}
},

DATE_PATTERN {
	String getPattern() {
		return "dd/MM/yyyy";
	}
},

TIME_PATTERN {
	String getPattern() {
		return "HH:mm:ss";
	}
};

abstract String getPattern();

}[/code][code]import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class DateUtils {
public static String formatDateTime(Calendar date) {
return new SimpleDateFormat(CalendarPattern.DATE_TIME_PATTERN.getPattern()).format(date.getTime());
}

public static String formatDate(Calendar date) {
	return new SimpleDateFormat(CalendarPattern.DATE_PATTERN.getPattern()).format(date.getTime());
}

public static String formatTime(Calendar date) {
	return new SimpleDateFormat(CalendarPattern.TIME_PATTERN.getPattern()).format(date.getTime());
}

private static Calendar stringToCalendar(String date, String pattern) {
	try {
		Calendar result = Calendar.getInstance();
		result.setTime((new SimpleDateFormat(pattern)).parse(date));
		return result;
	} catch (ParseException pe) {
		return null;
	}
}

public static Calendar stringToDate(String date) {
	return stringToCalendar(date, CalendarPattern.DATE_PATTERN.getPattern());
}

public static Calendar stringToTime(String time) {
	return stringToCalendar(time, CalendarPattern.TIME_PATTERN.getPattern());
}

public static Calendar stringToDateTime(String dateTime) {
	return stringToCalendar(dateTime, CalendarPattern.DATE_TIME_PATTERN.getPattern());
}

}[/code]

[quote=shyricosai]Olá pessoal, estou tentando aprender JAVA com JSF + Hibernate + JSP.
No meu Cadastro de Cliente, eu tenho um campo Data do Cadastro, que gostaria que fica-se a data em que o cadastro foi feito,
atribuido pelo sistema, pegando a data e hora do sistema.
E que essa data fosse visualizada na pagina e não pude-se ser alterada pelo usuario.
Eu tentei de varias formas mais estou encontrando dificuldade em usar o SimpleDateFormat e exibir os dados como Data, para
facilitar sua posterir persistencia no banco.
Segue o Codigo com o problema.

@Temporal(TemporalType.TIMESTAMP)
@Column(name="dtcadastro_cli", nullable=false)
private Calendar dataCadastro = hoje(); 

private Calendar hoje() {
	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
	Calendar dataHoje = new Calendar(sdf.format(data));                        -> Erro pois o SDF retorna uma String, qria transformar em Calendar
	return dataHoje;
}

o JSP tah assim o campo

<tr>	    
   <td><h:outputText value="Data do Cadastro"/></td>
   <td><h:inputText id="dtacadastro" readonly="true" value="#{clienteHandler.cliente.dataCadastro}"/></td>
</tr>

[/quote]

Vc não pode instanciar um objeto da classe Calendar pois ela é abstrata.
Se vc quer a data atual, apenas faça isso:

@Temporal(TemporalType.TIMESTAMP)
@Column(name="dtcadastro_cli", nullable=false)
private Calendar dataCadastro = hoje(); 

private Calendar hoje() {
	Calendar dataHoje = Calendar.getInstance();                       
	return dataHoje;
}

Se vc quer utilizar o SimpleDateFormat para criar um Calendar faça assim:

	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
	Calendar data = Calendar.getInstance();
        data.setTime(sdf.parse("24/06/2008"));

Flw

Obrigado a todos pela ajuda…

Foxlol

Fiz do jeito que você falou, só que aparece a mensagem abaixo dentro do campo:

java.util.GregorianCalendar[time=1214343497355,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=“Brazil/East”,
offset=-10800000,dstSavings=3600000,useDaylight=true,transitions=129,lastRule=java.util.SimpleTimeZone[id=Brazil/East,offset=-10800000,
dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=10,startDay=1,startDayOfWeek=1,startTime=0,startTimeMode=0,
endMode=2,endMonth=1,endDay=-1,endDayOfWeek=1,endTime=0,endTimeMode=0]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,
YEAR=2008,MONTH=5,WEEK_OF_YEAR=26,WEEK_OF_MONTH=4,DAY_OF_MONTH=24,DAY_OF_YEAR=176,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,
AM_PM=1,HOUR=6,HOUR_OF_DAY=18,MINUTE=38,SECOND=17,MILLISECOND=355,ZONE_OFFSET=-10800000,DST_OFFSET=0]

Eu gostaria que ao abrir a tela, fosse exibido a data atual do sistema, só que preservando o formato (CALENDAR) para que possa ser
persistido no banco sem problemas.
Instanciando uma variavel como Date, ele pega o tempo só que com muitos dados que para mim não terão importancia.
Por isso eu gostaria de apenas exibir ddMMyyyy hh:mm e que ele fosse assim persistido no banco.

Cara, acho que pra isso vc vai ter que usar um Converter.

Veja este tutorial: http://www.laliluna.de/javaserver-faces-converter-tutorial.html

[]'s