[Resolvido]Como converter String para Date?

35 respostas Resolvido
programaçãojava
J

Boa Tarde a todos.

Estou usando o seguinte código para fazer a conversão porem ele retorna um valor diferente que eu estou precisando.

SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
Date dataFormatadaAbertura = formato.parse(txt_Data_Abertura.getText());

valor que eu passo em String:
10/08/2018
valor que fica no date
Fri Aug 10 00:00:00 BRT 2018

valor que eu quero e o mesmo da entrada só que em date.

35 Respostas

F

Tente essas dicas no StackOverFlow :slight_smile:

O

primeiro, para de usar date, use LocalDate!

A classe Date já esta descontinuada a muito tempo!

D

Veja, você tem essa data, o que ocorre é que o objeto Date da classe java.util.Date não tem o formato que você espera ver.
Note que ele apresenta:
Aug: equivalente a agosto ou 08
10: refere-se ao dia do mês, no caso, 10
2018: refere-se ao ano, 2018.
00:00:00: Refere-se a hora, como você não especificou a hora, ele entende que seja meia noite, ou seja, zero hora.
Fri: refere-se ao dia da semana, no caso, sexta-feira.

D

Você sabe, por acaso, se ele está mexendo com java 8 ou superior ou está mexendo num sistema legado, que usa, por exemplo, java 1.4?

J

eh java 8 sim porem mudei tudo para LocalDate e usei o link que que @FearX me mandou para tentar fazer a conversão.

porem da o seguinte erro

java.time.fprmat.DateTimeParseException txt ‘10/08/2018’ coould not be parsed at index 0

J

Vou explicar o meu contexto eu fiz um banco com o campo date e quando eu pego oque o usuário digita pelo gettext vem em String dai tenho que fazer essa conversão.

Existe outra maneira de fazer essa inserção no banco talves eu esteja fazendo da maneira errado ou mais dificil?

L

Posta o código pra gente te ajudar

J

O codigo que esta fazendo a conversao e esta com erro eh esse se caso quiser mais algum codigo me fala que eu posto

LocalDateTime datetime = LocalDateTime.parse(txt_Data_Abertura.getText(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"));
String newstring = datetime.format(DateTimeFormatter.ofPattern("dd-MM-yyyy"));
D

LocalDate datetime = LocalDate.parse(“10/08/2018”, DateTimeFormatter.ofPattern(“dd/MM/yyyy”));
String newstring = datetime.format(DateTimeFormatter.ofPattern(“dd/MM/yyyy”));

J

@Daniel95 continua com o mesmo erro

E

Emendando uma pergunta na outra, por qual motivo eu faço uma conversão de String para qualquer outro tipo primitivo?

J

@ENGENHEIRO_DE_SOFTWA eu criei um banco com um campo tipo Date e eu pego o valor digitado pelo usuário pelo gettext que vem em String so que como o banco esta em date tenho que converter

D

Acabei de testar o código e está funcionando normal.
Tem certeza que o texto vem neste formato “dd/MM/yyyy”?
E você importou as classes corretamente?

J

eu acho que não.

LocalDateTime datetime = LocalDateTime.parse("10/08/2018", DateTimeFormatter.ofPattern("dd/MM/yyyy"));
String newstring = datetime.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
System.out.println(newstring);
D

Este código que você postou não foi o que eu te mandei acima.

D

o DateTimeFormatter.ofPattern(“dd-MM-yyyy”) precisa corresponder com o mesmo pattern de entrada, que no caso é “dd/MM/yyyy” e não “dd-MM-yyyy”.

J

eu mudei também só que ta dando outro erro so que mudou

D
Solucao aceita

Olhe no primeiro código que eu mandei, ele está utilizando LocalDate e não LocalDateTime, coloque exatamente este código:
LocalDate datetime = LocalDate.parse(txt_Data_Abertura.getText(), DateTimeFormatter.ofPattern(“dd/MM/yyyy”));
String newstring = datetime.format(DateTimeFormatter.ofPattern(“dd/MM/yyyy”));
System.out.println(newstring);

D

Se no código que eu mandei acima ainda der erro, de um System.out.print no getText e posta o que ele mostra.

J

deu certo agora valeu muito obrigado

porem agora esta com erro no dao a hora que ele vai pegar o local date

pst.setLocalDate(2, ordem_Producao.getData_abertura());
pst.setLocalDate(3, ordem_Producao.getData_fechamento());

antes era:

pst.setDate(2, ordem_Producao.getData_abertura());
pst.setDate(3, ordem_Producao.getData_fechamento());
D

pst.setDate(2, java.sql.Date.valueOf(ordem_Producao.getData_abertura()));
pst.setDate(3, java.sql.Date.valueOf(ordem_Producao.getData_fechamento()));

J

Muito obrigado deu certo de fazer essa conversão porem eu estou com mais uma duvida pois não consigo pegar do banco a date no formato “yyyy/mm/dd” e converter para “dd/mm/yyyy” e manter em date para depois eu converter em Localdate.

A converção deu certo eu so preciso passar a date nesse formato. “dd/mm/yyyy”

Instant instant = Instant.ofEpochMilli(data.getTime());
LocalDate Dateab = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).toLocalDate();
D

O campo data_abertura e data_fechamento do seu objeto não são LocalDate?
Pra recuperar da tabela o java.sql.Date da tabela você pode usar:
LocalDate localDate = new java.sql.Date(dateCampoTabela.getTime()).toLocalDate();
E o atributo LocalDate do seu objeto já armazena a data que você quer, se você quer exibí-lo em determinado formato, cabe à você formatar a saída da forma que desejar, seja: “dd/MM/yyyy” ou “MM/yyyy” tanto faz.

J

São Localdate ta certo exatamente eu pego converto normalmente como você me falou agora eu não estou conseguindo e formatar

eu não fiz assim não, eu peguei o valor assim:

Date d = (rs.getDate("data_fechamneto"));

E converti em LocalDate depois asim:

Instant instant = Instant.ofEpochMilli(d.getTime());
LocalDate Dateab = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).toLocalDate();

e a sim tinha dado certo porem a data fica como esta no banco

A
Date d = (rs.getDate("data_fechamneto"));
    Instant instant = d.toInstant();
	
	LocalDate Dateab = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).toLocalDate();
	
	DateTimeFormatter df = DateTimeFormatter.ofPattern("dd/MM/yyyy");
	String dateFormat = df.format(Dateab);
J

Obrigado antônio mais eu preciso que ela mantenha em localdate e não em String só troque o formato

D

Ele não vai “mudar o formato”, você terá de formatar a saída da forma que desejar, se quiser que apareça neste formato: dd/MM/yyyy em algum TextField por exemplo você deve formatá-lo da forma que desejar… Para aparecer somente mês e ano, a ordem de mês, ano e dia, etc…
Você pode mostrar o mesmo atributo LocalDate ao mesmo tempo em cinco componentes e em cada um deles em uma formatação diferente.

J

@Daniel95 obrigado pelas dicas mais teria como você me dar 1 exemplo de como fazer essa formatação isso que eu não estou sabendo fazer

D

Da mesma forma que foi falado acima. Onde você está mostrando está data?
Por exemplo, se fosse em um JTextField você poderia fazer:
textField.setText(DateTimeFormatter.ofPattern(“dd/MM/yyyy”).format(atributoLocalDate));

J

Nossa @Daniel95 sou grato a você Obrigado deu certinho eu consegui fazer a conversão aqui.

era para colocar no grid e eu usei como vc me passou e deu certo

tabelaOperacao.setValueAt(DateTimeFormatter.ofPattern("dd/MM/yyyy").format(op.getData_abertura()), i, 2);

A

Ou seja, como resultado final você está usando uma string e não LocalDate.
Sendo assim não é necessário converter de Date para LocalDate:

Date data = rs.getDate("data_fechamneto");
	SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
	tabelaOperacao.setValueAt(df.format(data), i, 2);
J

Não eu estou usando LocalDate mesmo e no codigo que vc tinha me passado converta o localdate para String

A

Eu sei mas se você vai pegar do banco de dados para um componente não precisa usar localdate.

Date data = rs.getDate("data_fechamneto");
	 SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
	 tabelaOperacao.setValueAt(df.format(data), i, 2);

Caminho mais curto.

Isso:

DateTimeFormatter df = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String dateFormat = df.format(Dateab);

Igual:

String df = DateTimeFormatter.ofPattern("dd/MM/yyyy").format(Dateab);

DateTimeFormatter.ofPattern("dd/MM/yyyy").format(op.getData_abertura()) retorna String.

D

O objeto dele tem atributo LocalDate portanto a conversão de java.sql.Date para LocalDate seria no DAO para popular os objetos e a conversão seria no momento de popular a tabela. Agora, se está tudo junto a consulta ao banco com o modelo e a view ai pode ser direto mesmo ou tanto faz…
Eu ainda aconselharia a popular a tabela com o objeto mesmo e criar um renderer para formatar da forma desejada. Se ele utilizar um sorter na tabela por exemplo e o atributo da coluna da data for String iria bagunçar tudo. Mas se isso não faz impacto nenhum no projeto dele então…

A

Concordo com você, mas ele ainda não está usando como LocalDate.

Criado 10 de agosto de 2018
Ultima resposta 13 de ago. de 2018
Respostas 35
Participantes 8