10
respostas

Salvar data no banco de dados no formato brasileiro

Bom dia, estou com um problema, não chega a ser um problema, quando salvo uma data no meu banco de dados chega no formato americano, e queria salvar no formato brasileiro, pois eu já estou convertendo ela no meu html, e mesmo assim a data fica em outro formato. Vou dar um exemplo

    <p:outputLabel value="Data da compra: " for="dataCompra" />
                                        <p:inputMask id="dataCompra" required="true"
                                            requiredMessage="O campo data da compra é obrigatório"
                                            value="#{compraBean.compra.data.time}" mask="99/99/9999">
                                            <f:convertDateTime pattern="dd/MM/yyyy" />
                                            <p:ajax event="blur"
                                                listener="#{compraBean.verificarDadaCompra}"
                                                update="formularioCompra:dataCompra :mensagem" />
                                        </p:inputMask>

Está opção

<f:convertDateTime pattern="dd/MM/yyyy" />

Não seria para coverter? Pois então no meu banco a data está com o seguinte formato.

2017-07-13 e queria 13/07/2017

10 respostas

Oi Allison, tudo bem ?

Cara vê se isso pode te ajudar :

https://elias.praciano.com/2015/06/como-configurar-o-mysql-para-exibir-datas-em-portugues/

Matheus fiz os comando do post, mais a data ficou da mesma maneira.

Oi Alisson, tudo bem?

O convertDateTime vai pegar o objeto do tipo Date e vai converter ele para o formato informado no pattern apenas na view.

No banco a data vai ser armazenada conforme as especificações do banco e no formato dele. A não ser que alguém vá consultar direto o banco, não vejo o porquê de mudar a exibição dele. Mas caso seja muito necessário, vale fazer a configuração que o Matheus passou.

Samir entendi, sabe o porque quero fazer isso? No meu html uso o meu datatable e depois faço uma pesquisa pelo campo filterby correto? E quando faço uma pesquisa pelo filterBy do primefaces eu tenho que passar em formato americano para poder aparecer, então como resolver esse problema?

Justo! tem duas formas de resolver isso, ou você pode colocar uma mácara no input do filter via jQuery, o que não é tão complicado ou vc pode colocar um datePicker do próprio Primefaces, que eu acredito que seja mais fácil.

<p:dataTable id="dataTable" widgetVar="Table" var="item">
//aqui o importante é só o widgetVar que vai ser usado no ajax
   ...

<f:facet name="filter">
    <p:calendar  pattern="dd/MM/yyyy">
        <p:ajax event="dateSelect"  oncomplete="PF('Table').filter()"/>
    </p:calendar>
</f:facet>

veja se isso funciona =)

Samir ainda acho que não está convertendo, já tinha tentado quase na maneira igual a sua, ficando assim, mais não tive resultado :(

<p:column headerText="Data" filterBy="#{lc.data}"
                                filterMatchMode="contains">
                                <f:facet name="filter">
                                    <p:calendar pattern="dd/MM/yyyy">
                                        <p:ajax event="dateSelect" oncomplete="PF('Table').filter();"
                                            update="tabelaCompra" />
                                    </p:calendar>
                                </f:facet>
                                <h:outputLabel value="#{lc.data}">
                                    <f:converter converterId="dataLocalConverter" />
                                </h:outputLabel>
                            </p:column>

No banco de dados não vai converter mesmo, mas no input do filter o valor vai entrar diferente, no formato que vc quer. Não sei se entendi o problema mas converter a data para entrar no banco de dados em outro formato é um passo a mais que traz uma série de desvantagens para o sistema. O ideal é que a conversão da data para o fomato dd/MM/yyyy seja feita aonde vc quer manipular os dados, como no input, no dataTable e no filter.

Ops me expressei errado aqui, agora não quero mais converter para o meu banco de dados, só que no meu bd a data está 2017-07-14 e quando eu puxo o valor do meu banco de dados para o datatable o valor da data fica correto no valor brasileiro 14/07/2017 mais quando eu procuro por uma data no filter com o formato brasileiro não acha. E eu fiz esse código encima com um tópico que eu achei na net, e mesmo assim quando escolho o dia no meu calendar dentro da colluna da dataTable não acha a data, me retorna em branco

Fala Alisson, desculpe a demora. Conseguiu resolver o seu problema?

vc passou o atributo do widgetVar no table?

abraço

Oi Samir agora desculpa eu a demora, então não consegui resolver, quando seleciono a data, ele me retorna vazio :(