Fundamentos da Linguagem Java



   Classes Básicas da API do Java

               Datas e Strings



           Ludimila Monjardim Casagrande
                       2012
Manipulação de Datas
A Classe Abstrata: Calendar

     A classe abstrata Calendar encapsula um
         momento no tempo representado em
         milissegundos. Também provê métodos para
         manipulação desse momento.

     A subclasse concreta de Calendar mais usada é
         a GregorianCalendar, que representa o
         calendário usado pela maior parte dos países.




Classes Básicas do Java   ©2012 Ludimila Monjardim Casagrande   3
A Classe Abstrata: Calendar

     Para obter um Calendar que encapsula o
         instante atual (data e hora), usamos o método
         estático getInstance():
         Calendar c = Calendar.getInstance();
         System.out.println("Dia do Mês: "
                                  + c.get(Calendar.DAY_OF_MONTH));
         System.out.println("Dia da Semana: "
                                  + c.get(Calendar.DAY_OF_WEEK));

         Um possível resultado é:
         Dia do Mês: 11
         Dia da Semana: 2
         No exemplo acima, o dia da semana 2 representa a segunda-feira.


Classes Básicas do Java        ©2012 Ludimila Monjardim Casagrande         4
A Classe Abstrata: Calendar

     A classe Calendar numera os meses e os dias
         da semana da seguinte forma:
            Os meses de janeiro (january) a dezembro
             (december) são numerados de 0 a 11.
            Os dias da semana são numerados de 1 a 7,
             sendo o domingo (sunday) o primeiro dia.




Classes Básicas do Java   ©2012 Ludimila Monjardim Casagrande   5
A Classe: GregorianCalendar

     Principais construtores:
         GregorianCalendar()
         GregorianCalendar(int year, int month, int dayOfMonth)
         GregorianCalendar(int year, int month, int dayOfMonth,
                          int hourOfDay, int minute, int second)


            Calendar c1 = new GregorianCalendar(2012, 4, 11);
                                   equivale a
Calendar c2 = new GregorianCalendar(2012, Calendar.MAY, 11);

Classes Básicas do Java    ©2012 Ludimila Monjardim Casagrande     6
A Classe: Date

     Recomenda-se evitar o uso da classe Date porque a
         maior parte de seus métodos estão marcados como
         deprecated, porém, ela ainda tem amplo uso legado nas
         bibliotecas do Java. Ela foi substituída no Java 1.1 pelo
         Calendar, para haver suporte correto à
         internacionalização do sistema de datas.
     Você pode pegar um Date de um Calendar e vice-versa
         através dos getters e setters de time:

          Calendar c = new GregorianCalendar(2005, Calendar.OCTOBER, 12);
          Date d = c.getTime();
          c.setTime(d);


Classes Básicas do Java     ©2012 Ludimila Monjardim Casagrande             7
A Classe: Date

     A classe Date numera os meses e os dias da
         semana da seguinte forma:
            Os meses de janeiro (january) a dezembro
             (december) são numerados de 0 a 11, assim
             como acontece na classe Calendar.
            Os dias da semana são numerados de 0 a 6,
             sendo o domingo (sunday) o primeiro dia,
             diferentemente da numeração usada pela classe
             Calendar.


Classes Básicas do Java   ©2012 Ludimila Monjardim Casagrande   8
A Classe Abstrata: DateFormat

     A classe java.text.DateFormat permite converter
         Strings de inputs do usuário para Dates,
         seguindo um determinado formato.
     Serve também para fazer o inverso: pegar uma
         data e gerar uma String de saída em um certo
         formato.
     A classe SimpleDateFormat, que estende
         DateFormat, é a que oferece a forma mais fácil
         de fazer tudo isso.

Classes Básicas do Java   ©2012 Ludimila Monjardim Casagrande   9
A Classe: SimpleDateFormat

     // usuário digita uma String
     String s = "21/02/1999";
     // date format
     DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
     // converte para Date
     Date data = df.parse(s);
     // formata para String de novo
     String formatada = df.format(data);



Classes Básicas do Java   ©2012 Ludimila Monjardim Casagrande   10
Exemplo usando Date
   private void botaoSalvarActionPerformed(java.awt.event.ActionEvent evt) {
        try {
           Usuario u = new Usuario();
           u.setCodigo(Integer.parseInt(campoCodigo.getText()));       Considerando que o
           u.setNome(campoNome.getText());                             atributo data é do
           u.setLogin(campoLogin.getText());                           tipo Date na classe
                                                                       Usuario.
           DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
           df.setLenient(false);
           Date data = df.parse(campoData.getText());
           u.setData(data);

           CadUsuario cad = new CadUsuarioImpl();
           cad.adicionar(u);
           JOptionPane.showMessageDialog(this, "Usuário cadastrado com sucesso.");
        } catch (ParseException ex) {
           JOptionPane.showMessageDialog(this, "Formato de data inválido.");
        } catch (Exception ex) {
           JOptionPane.showMessageDialog(this, "Erro ao salvar o usuário.");
        }
   }
Classes Básicas do Java          ©2012 Ludimila Monjardim Casagrande                         11
Exemplo usando Calendar
   private void botaoSalvarActionPerformed(java.awt.event.ActionEvent evt) {
        try {
           Usuario u = new Usuario();
           u.setCodigo(Integer.parseInt(campoCodigo.getText()));
                                                                       Considerando que o
           u.setNome(campoNome.getText());
           u.setLogin(campoLogin.getText());
                                                                       atributo data é do
                                                                       tipo Calendar na classe
           DateFormat df = new SimpleDateFormat("dd/MM/yyyy");         Usuario.
           df.setLenient(false);
           Calendar data = new GregorianCalendar();
           data.setTime(df.parse(campoData.getText()));
           u.setData(data);

           CadUsuario cad = new CadUsuarioImpl();
           cad.adicionar(u);
           JOptionPane.showMessageDialog(this, "Usuário cadastrado com sucesso.");
        } catch (ParseException ex) {
           JOptionPane.showMessageDialog(this, "Formato de data inválido.");
        } catch (Exception ex) {
           JOptionPane.showMessageDialog(this, "Erro ao salvar o usuário.");
        }
   }
Classes Básicas do Java          ©2012 Ludimila Monjardim Casagrande                        12
Comportamento da classe Date

     Métodos de Date:
         DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
         df.setLenient(false); //torna a validação mais rígida
         Date data = df.parse("18/06/2012"); //segunda-feira
         System.out.println("Dia do mês: " + data.getDate());          //resultado: 18
         System.out.println("Mês: " + data.getMonth());                //resultado: 5
         System.out.println("Ano: " + data.getYear());                 //resultado: 112
         System.out.println("Dia da semana: " + data.getDay()); //resultado: 1




Classes Básicas do Java          ©2012 Ludimila Monjardim Casagrande                      13
Comportamento da classe Calendar

     Métodos de Calendar:
     DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
     df.setLenient(false);
     Calendar data = new GregorianCalendar();
     data.setTime(df.parse("18/06/2012"));
     System.out.println("Dia do Mês: " + data.get(Calendar.DAY_OF_MONTH));   //resultado: 18
     System.out.println("Mês: " + data.get(Calendar.MONTH));                 //resultado: 5
     System.out.println("Ano: " + data.get(Calendar.YEAR));                  //resultado: 2012
     System.out.println("Dia da Semana:" + data.get(Calendar.DAY_OF_WEEK)); //resultado: 2




Classes Básicas do Java           ©2012 Ludimila Monjardim Casagrande                         14
Manipulação de Strings
A Classe: String

     A classe String é imutável. Sendo assim, quando
         algo é concatenado a uma String, esta não é
         alterada. O que ocorre é a criação de uma nova
         String.
     Por isso trabalhar com uma mesma String
         diversas vezes pode ter um efeito colateral: gerar
         inúmeras Strings temporárias.
     Isto prejudica a performance da aplicação
         consideravelmente.

Classes Básicas do Java   ©2012 Ludimila Monjardim Casagrande   16
A Classe: StringBuffer

     Se for necessário trabalhar muito com a
         manipulação de uma mesma String (por
         exemplo, dentro de um laço), o ideal é utilizar a
         classe StringBuffer.
     A classe StringBuffer representa uma sequência
         de caracteres.
     Diferentemente da String, ela é mutável e, por
         isso, evita problemas de performance.



Classes Básicas do Java   ©2012 Ludimila Monjardim Casagrande   17
A Classe: StringBuffer
   import java.util.Scanner;
   public class Teste {
       public static void main(String[ ] args) {
           Scanner entrada = new Scanner(System.in);
           String nome;
           System.out.println("Informe seu nome: ");
           nome = entrada.next();


           StringBuffer sb = new StringBuffer("Olá ");
           sb.append(nome);
           sb.append("!");
           System.out.println(sb);
       }
   }

Classes Básicas do Java              ©2012 Ludimila Monjardim Casagrande   18
Tutoriais do Java

     The Java Tutorials
            Getting Started
                  http://java.sun.com/docs/books/tutorial/getStarted/
            Learning the Java Language
                  http://java.sun.com/docs/books/tutorial/java/




Classes Básicas do Java        ©2012 Ludimila Monjardim Casagrande       19
Referências

     Caelum: Ensino e Soluções em Java.
         FJ-11 – Java e Orientação a Objetos.
         http://www.caelum.com.br/curso/fj-11-java-
         orientacao-objetos/




Classes Básicas do Java   ©2012 Ludimila Monjardim Casagrande   20

POO - 24 - Classes Básicas do Java - Datas

  • 1.
    Fundamentos da LinguagemJava Classes Básicas da API do Java Datas e Strings Ludimila Monjardim Casagrande 2012
  • 2.
  • 3.
    A Classe Abstrata:Calendar  A classe abstrata Calendar encapsula um momento no tempo representado em milissegundos. Também provê métodos para manipulação desse momento.  A subclasse concreta de Calendar mais usada é a GregorianCalendar, que representa o calendário usado pela maior parte dos países. Classes Básicas do Java ©2012 Ludimila Monjardim Casagrande 3
  • 4.
    A Classe Abstrata:Calendar  Para obter um Calendar que encapsula o instante atual (data e hora), usamos o método estático getInstance(): Calendar c = Calendar.getInstance(); System.out.println("Dia do Mês: " + c.get(Calendar.DAY_OF_MONTH)); System.out.println("Dia da Semana: " + c.get(Calendar.DAY_OF_WEEK)); Um possível resultado é: Dia do Mês: 11 Dia da Semana: 2 No exemplo acima, o dia da semana 2 representa a segunda-feira. Classes Básicas do Java ©2012 Ludimila Monjardim Casagrande 4
  • 5.
    A Classe Abstrata:Calendar  A classe Calendar numera os meses e os dias da semana da seguinte forma:  Os meses de janeiro (january) a dezembro (december) são numerados de 0 a 11.  Os dias da semana são numerados de 1 a 7, sendo o domingo (sunday) o primeiro dia. Classes Básicas do Java ©2012 Ludimila Monjardim Casagrande 5
  • 6.
    A Classe: GregorianCalendar  Principais construtores: GregorianCalendar() GregorianCalendar(int year, int month, int dayOfMonth) GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second) Calendar c1 = new GregorianCalendar(2012, 4, 11); equivale a Calendar c2 = new GregorianCalendar(2012, Calendar.MAY, 11); Classes Básicas do Java ©2012 Ludimila Monjardim Casagrande 6
  • 7.
    A Classe: Date  Recomenda-se evitar o uso da classe Date porque a maior parte de seus métodos estão marcados como deprecated, porém, ela ainda tem amplo uso legado nas bibliotecas do Java. Ela foi substituída no Java 1.1 pelo Calendar, para haver suporte correto à internacionalização do sistema de datas.  Você pode pegar um Date de um Calendar e vice-versa através dos getters e setters de time: Calendar c = new GregorianCalendar(2005, Calendar.OCTOBER, 12); Date d = c.getTime(); c.setTime(d); Classes Básicas do Java ©2012 Ludimila Monjardim Casagrande 7
  • 8.
    A Classe: Date  A classe Date numera os meses e os dias da semana da seguinte forma:  Os meses de janeiro (january) a dezembro (december) são numerados de 0 a 11, assim como acontece na classe Calendar.  Os dias da semana são numerados de 0 a 6, sendo o domingo (sunday) o primeiro dia, diferentemente da numeração usada pela classe Calendar. Classes Básicas do Java ©2012 Ludimila Monjardim Casagrande 8
  • 9.
    A Classe Abstrata:DateFormat  A classe java.text.DateFormat permite converter Strings de inputs do usuário para Dates, seguindo um determinado formato.  Serve também para fazer o inverso: pegar uma data e gerar uma String de saída em um certo formato.  A classe SimpleDateFormat, que estende DateFormat, é a que oferece a forma mais fácil de fazer tudo isso. Classes Básicas do Java ©2012 Ludimila Monjardim Casagrande 9
  • 10.
    A Classe: SimpleDateFormat // usuário digita uma String String s = "21/02/1999"; // date format DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); // converte para Date Date data = df.parse(s); // formata para String de novo String formatada = df.format(data); Classes Básicas do Java ©2012 Ludimila Monjardim Casagrande 10
  • 11.
    Exemplo usando Date private void botaoSalvarActionPerformed(java.awt.event.ActionEvent evt) { try { Usuario u = new Usuario(); u.setCodigo(Integer.parseInt(campoCodigo.getText())); Considerando que o u.setNome(campoNome.getText()); atributo data é do u.setLogin(campoLogin.getText()); tipo Date na classe Usuario. DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); df.setLenient(false); Date data = df.parse(campoData.getText()); u.setData(data); CadUsuario cad = new CadUsuarioImpl(); cad.adicionar(u); JOptionPane.showMessageDialog(this, "Usuário cadastrado com sucesso."); } catch (ParseException ex) { JOptionPane.showMessageDialog(this, "Formato de data inválido."); } catch (Exception ex) { JOptionPane.showMessageDialog(this, "Erro ao salvar o usuário."); } } Classes Básicas do Java ©2012 Ludimila Monjardim Casagrande 11
  • 12.
    Exemplo usando Calendar private void botaoSalvarActionPerformed(java.awt.event.ActionEvent evt) { try { Usuario u = new Usuario(); u.setCodigo(Integer.parseInt(campoCodigo.getText())); Considerando que o u.setNome(campoNome.getText()); u.setLogin(campoLogin.getText()); atributo data é do tipo Calendar na classe DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); Usuario. df.setLenient(false); Calendar data = new GregorianCalendar(); data.setTime(df.parse(campoData.getText())); u.setData(data); CadUsuario cad = new CadUsuarioImpl(); cad.adicionar(u); JOptionPane.showMessageDialog(this, "Usuário cadastrado com sucesso."); } catch (ParseException ex) { JOptionPane.showMessageDialog(this, "Formato de data inválido."); } catch (Exception ex) { JOptionPane.showMessageDialog(this, "Erro ao salvar o usuário."); } } Classes Básicas do Java ©2012 Ludimila Monjardim Casagrande 12
  • 13.
    Comportamento da classeDate  Métodos de Date: DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); df.setLenient(false); //torna a validação mais rígida Date data = df.parse("18/06/2012"); //segunda-feira System.out.println("Dia do mês: " + data.getDate()); //resultado: 18 System.out.println("Mês: " + data.getMonth()); //resultado: 5 System.out.println("Ano: " + data.getYear()); //resultado: 112 System.out.println("Dia da semana: " + data.getDay()); //resultado: 1 Classes Básicas do Java ©2012 Ludimila Monjardim Casagrande 13
  • 14.
    Comportamento da classeCalendar  Métodos de Calendar: DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); df.setLenient(false); Calendar data = new GregorianCalendar(); data.setTime(df.parse("18/06/2012")); System.out.println("Dia do Mês: " + data.get(Calendar.DAY_OF_MONTH)); //resultado: 18 System.out.println("Mês: " + data.get(Calendar.MONTH)); //resultado: 5 System.out.println("Ano: " + data.get(Calendar.YEAR)); //resultado: 2012 System.out.println("Dia da Semana:" + data.get(Calendar.DAY_OF_WEEK)); //resultado: 2 Classes Básicas do Java ©2012 Ludimila Monjardim Casagrande 14
  • 15.
  • 16.
    A Classe: String  A classe String é imutável. Sendo assim, quando algo é concatenado a uma String, esta não é alterada. O que ocorre é a criação de uma nova String.  Por isso trabalhar com uma mesma String diversas vezes pode ter um efeito colateral: gerar inúmeras Strings temporárias.  Isto prejudica a performance da aplicação consideravelmente. Classes Básicas do Java ©2012 Ludimila Monjardim Casagrande 16
  • 17.
    A Classe: StringBuffer  Se for necessário trabalhar muito com a manipulação de uma mesma String (por exemplo, dentro de um laço), o ideal é utilizar a classe StringBuffer.  A classe StringBuffer representa uma sequência de caracteres.  Diferentemente da String, ela é mutável e, por isso, evita problemas de performance. Classes Básicas do Java ©2012 Ludimila Monjardim Casagrande 17
  • 18.
    A Classe: StringBuffer import java.util.Scanner; public class Teste { public static void main(String[ ] args) { Scanner entrada = new Scanner(System.in); String nome; System.out.println("Informe seu nome: "); nome = entrada.next(); StringBuffer sb = new StringBuffer("Olá "); sb.append(nome); sb.append("!"); System.out.println(sb); } } Classes Básicas do Java ©2012 Ludimila Monjardim Casagrande 18
  • 19.
    Tutoriais do Java  The Java Tutorials  Getting Started  http://java.sun.com/docs/books/tutorial/getStarted/  Learning the Java Language  http://java.sun.com/docs/books/tutorial/java/ Classes Básicas do Java ©2012 Ludimila Monjardim Casagrande 19
  • 20.
    Referências  Caelum: Ensino e Soluções em Java. FJ-11 – Java e Orientação a Objetos. http://www.caelum.com.br/curso/fj-11-java- orientacao-objetos/ Classes Básicas do Java ©2012 Ludimila Monjardim Casagrande 20