Formatação data e hora

Pessoal, estou estudando Java. Estava olhando configurações de data e hora. Até o momento entendi que é mais ou menos assim:

package testesdecoisas;
import java.util.Date;
public class TestesDeCoisas {
public static void main(String[] args) {
//Exibição de data e hora
Date teste = new Date();
System.out.println("A data é " +teste);
}
}

A minha dúvida é: Quando eu executo esse código a resposta seria “A data é Wed Aug 23 18:40:29 BRT 2017”

Como faço para formatar isso? Colocando por exemplo 23/08/2017 ou até mesmo conseguir separar isso em algo como “Hoje é 23/08/27 e são 18:40” ?

Pesquise a classe SimpleDateFormat

1 curtida

Algo assim.

SimpleDateFormat f = new SimpleDateFormate("dd/MM/yyyy");
Date teste = new Date();
System.out.println(f.format(teste));
1 curtida

Então, aproveitando o tópico. Agradeço ao amigo @rodevops pela indicação. Não sabia por onde começar e agora consegui. A pergunta agora é: Como faço para passar isso pra uma Swing? O action do botão fica assim:

private void btnDataActionPerformed(java.awt.event.ActionEvent evt) {
Date relogio = new Date();
lblData.setText(relogio.toString());
}

Mas se eu faço isso private void btnDataActionPerformed(java.awt.event.ActionEvent evt) {
Date relogio = new Date();
SimpleDateFormat horario = new SimpleDateFormat (“dd MM yyyy”);
lblData.setText(horario.format(relogio.toString()));
}

Quando eu clico no botão pra mostrar a data, ele dá erro.

Exception in thread “AWT-EventQueue-0” java.lang.IllegalArgumentException: Cannot format given Object as a Date
at java.text.DateFormat.format(DateFormat.java:310)
at java.text.Format.format(Format.java:157)
at relogiodatahora.DataHora.btnDataActionPerformed(DataHora.java:83)
at relogiodatahora.DataHora.access$000(DataHora.java:7)
at relogiodatahora.DataHora$1.actionPerformed(DataHora.java:35)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Alguém poderia me explicar como fazer isso dar certo?

Você não formata o texto da data/hora…

horario.format(relogio.toString());

Formata a data/hora…

horario.format(relogio);
1 curtida

Opa. Deu certo aqui! Muito obrigado mano. Só uma ultima pergunta pra fechar: Quando eu seto o “SimpleDateFormat horario = new SimpleDateFormat(“HH:mm:ss”)” ele me dá a hora estática. Ex: 20:44:58

Sabe se tem alguma forma de fazer esse contador continuar andando sem precisar ter que clicar no botão novamente para atualizar os segundos?

Testa isso ae, aqui deu certo:

package br.paulo;

import java.util.Calendar;
import java.util.GregorianCalendar;
    public class teste extends javax.swing.JFrame {
        /**
         * Creates new form Frame
         */
        public teste() {
            initComponents();
            new Thread(){
                @Override
                public void run(){
                    for(;;){
                        dataEHora();
                        try{
                            sleep(1000);
                        }catch(InterruptedException ie){
                            ie.printStackTrace();
                        }
                    }
                }
            }.start();
        }
        /**
         * This method is called from within the constructor to initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is always
         * regenerated by the Form Editor.
         */
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">
        private void initComponents() {
            lData = new javax.swing.JLabel();
            lHora = new javax.swing.JLabel();
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            lData.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
            lData.setForeground(new java.awt.Color(51, 51, 255));
            lData.setText("jLabel1");
            lHora.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
            lHora.setForeground(new java.awt.Color(51, 51, 255));
            lHora.setText("jLabel2");
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(lData)
                    .addGap(18, 18, 18)
                    .addComponent(lHora)
                    .addContainerGap(220, Short.MAX_VALUE))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(lData)
                        .addComponent(lHora))
                    .addContainerGap(260, Short.MAX_VALUE))
            );
            pack();
        }// </editor-fold>
        /**
         * @param args the command line arguments
         */
        public void dataEHora(){
            Calendar cal = new GregorianCalendar();
            int dia = cal.get(Calendar.DAY_OF_MONTH);
            int mes = cal.get(Calendar.MONTH);
            int ano = cal.get(Calendar.YEAR);
            int hora = cal.get(Calendar.HOUR);
            int minuto = cal.get(Calendar.MINUTE);
            int segundo = cal.get(Calendar.SECOND);
            lData.setText("Data:"+dia+"/"+(mes+1)+"/"+ano);
            lHora.setText("Hora:"+hora+":"+minuto+":"+segundo);
        }
        public static void main(String args[]) {
            /* Set the Nimbus look and feel */
            //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
            /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
             * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
             */
            try {
                for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                    if ("Nimbus".equals(info.getName())) {
                        javax.swing.UIManager.setLookAndFeel(info.getClassName());
                        break;
                    }
                }
            } catch (ClassNotFoundException ex) {
                java.util.logging.Logger.getLogger(teste.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                java.util.logging.Logger.getLogger(teste.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                java.util.logging.Logger.getLogger(teste.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (javax.swing.UnsupportedLookAndFeelException ex) {
                java.util.logging.Logger.getLogger(teste.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            }
            //</editor-fold>
            /* Create and display the form */
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new teste().setVisible(true);
                }
            });
        }
        // Variables declaration - do not modify
        private javax.swing.JLabel lData;
        private javax.swing.JLabel lHora;
        // End of variables declaration
    }