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

20
Classes Básicas da API do Java Datas e Strings Fundamentos da Linguagem Java Ludimila Monjardim Casagrande 2012

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

Page 1: POO - 24 - Classes Básicas do Java - Datas

Classes Básicas da API do Java

Datas e Strings

Fundamentos da Linguagem Java

Ludimila Monjardim Casagrande 2012

Page 2: POO - 24 - Classes Básicas do Java - Datas

Manipulação de Datas

Page 3: POO - 24 - Classes Básicas do Java - 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

Page 4: POO - 24 - Classes Básicas do Java - Datas

A Classe Abstrata: Calendar

Para obter um Calendar que encapsula o

instante atual (data e hora), usamos o método

estático getInstance():

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

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.

Page 5: POO - 24 - Classes Básicas do Java - Datas

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

Page 6: POO - 24 - Classes Básicas do Java - Datas

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)

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

Calendar c1 = new GregorianCalendar(2012, 4, 11);

equivale a

Calendar c2 = new GregorianCalendar(2012, Calendar.MAY, 11);

Page 7: POO - 24 - Classes Básicas do Java - Datas

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:

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

Calendar c = new GregorianCalendar(2005, Calendar.OCTOBER, 12);

Date d = c.getTime();

c.setTime(d);

Page 8: POO - 24 - Classes Básicas do Java - Datas

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

Page 9: POO - 24 - Classes Básicas do Java - Datas

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

Page 10: POO - 24 - Classes Básicas do Java - Datas

A Classe: SimpleDateFormat

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

// 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);

Page 11: POO - 24 - Classes Básicas do Java - Datas

Exemplo usando Date

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

private void botaoSalvarActionPerformed(java.awt.event.ActionEvent evt) {

try {

Usuario u = new Usuario();

u.setCodigo(Integer.parseInt(campoCodigo.getText()));

u.setNome(campoNome.getText());

u.setLogin(campoLogin.getText());

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.");

}

}

Considerando que o

atributo data é do

tipo Date na classe

Usuario.

Page 12: POO - 24 - Classes Básicas do Java - Datas

Exemplo usando Calendar

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

private void botaoSalvarActionPerformed(java.awt.event.ActionEvent evt) {

try {

Usuario u = new Usuario();

u.setCodigo(Integer.parseInt(campoCodigo.getText()));

u.setNome(campoNome.getText());

u.setLogin(campoLogin.getText());

DateFormat df = new SimpleDateFormat("dd/MM/yyyy");

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.");

}

}

Considerando que o

atributo data é do

tipo Calendar na classe

Usuario.

Page 13: POO - 24 - Classes Básicas do Java - Datas

Comportamento da classe Date

Métodos de Date:

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

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

Page 14: POO - 24 - Classes Básicas do Java - Datas

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

Page 15: POO - 24 - Classes Básicas do Java - Datas

Manipulação de Strings

Page 16: POO - 24 - Classes Básicas do Java - Datas

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

Page 17: POO - 24 - Classes Básicas do Java - Datas

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

Page 18: POO - 24 - Classes Básicas do Java - Datas

A Classe: StringBuffer

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

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);

}

}

Page 19: POO - 24 - Classes Básicas do Java - Datas

Classes Básicas do Java ©2012 Ludimila Monjardim Casagrande 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/