SlideShare uma empresa Scribd logo
1 de 17
JAVA 8
Java. Date, java.Calendar e java.Time
Manipulando Datas
Objetivos
1. Problemas existentes com as bibliotecas de data do Java;
2. Nova API para manipulação de datas no Java 8;
3. Códigos exemplificando.
API java.Date
 Desde janeiro de 1996
 Java 1.0
 Depreciada
 Mutabilidade
 Integração com JDBC
 Contém um instante no tempo (em ms)
 Precisa implementar a lógica
 Não possui operação de manipulação de datas
 Sem Timezones (internacionalização)
 Horário de Brasília ou de Nova York?
 String com formato americano
API java.Date
 Exemplos:
 Inconsistência:
Date date = new Date(2009, 2, 1);
//Criação de uma data cujo o ano será 3909
API java.Calendar
 Java 1.1
 Ainda Mutável
 Sem “Thread Safe”
 Não pode formatar datas diretamente
 Aritméticas de datas
 Complicado, porém possível
 Define localização (localTimeZone)
 Algumas funções depreciadas
API java.Calendar
 Exemplo:
 Inconsistência:
Calendar calendar = new GregorianCalendar(2014, 0, 20);
// Os meses variam de 0-11 (Janeiro à Dezembro, respectivamente)
//Criando uma data: 20/01/2014
Exemplo - Mutabilidade
 java.Calendar:
Calendar data = new GregorianCalendar(2004, 2, 13);
cliente.setVencimento(data);
Calendar doisDiasDepois = cliente.getVencimento();
doisDiasDepois.add(Calendar.DAY_OF_MONTH, 2);
outroCliente.setVencimento(doisDiasDepois);
// efeito colateral:
System.out.println(cliente.getVencimento());
Exemplo - Imutabilidade
 Classe String
String s = “java”;
s.toUpperCase(); // Letras maiúsculas
System.out.println(s);
Análise – Date e Calendar
 Inconsistência
 Mutabilidade
 Não-padronizável
 Não-formatável
 Mínima manipulação
Joda Time
 Desde 2002
 API Open Source
 Muito utilizada
 Soluciona várias deficiências das outras bibliotecas
 Imutabilidade
API java.Time
 Imutabilidade
 “Thread-Safe”
 Padronizada (ISO-8601)
 Novo conceito
 Data para computadores
• Continuous
 Data para humanos
• Human
 Tipos Específicos
 LocalDateTime
 LocalDate
 LocalTime
API java.Time
 Exemplo:
 Imutabilidade/Thread-Safe:
LocalDate hoje = LocalDate.now(); //2015-01-20
hoje.plusDays(1); // Tentando atribuir +1 ao dia
System.out.println(hoje); //2015-01-20 (ainda é hoje, e não amanhã!)
LocalDate hoje = LocalDate.now();
LocalDate amanha = hoje.plusDays(1); // somando 1 dia
boolean mesmoObjeto = hoje == amanha; //false, já que é imutável
Características java.Time
 Baseada em padrões
 ISO-8601
 Imutável
 LocalDate date = LocalDate.date(2009, 1, 1); // Criando
 date = date.withYear(2014); // Alterando com nova invocação
 Interfaces Fluentes
 date = date.withYear(2014).withMonthOfYear(1).withDayOfMonth(20); // Legibilidade
 Clareza
 date = date.withYear(2014).withMonthOfYear(1).withDayOfMonth(20);
 date = date.minusYears(2); // Resulta em 2014-01-18
 Extensível
 Pontos de extensão
Calendar versus Time
 Calendar
 Calendar mesQueVem = Calendar.getInstance();// Criando uma data
mesQueVem.add(Calendar.MONTH, 1); // Adicionando +1 ao mês
 Time
 LocalDate mesQueVem = LocalDate.now().plusMonths(1);
Calendar versus Time
 Calendar
 Calendar instante = Calendar.getInstance();
instante.set(2015, Calendar.FEBRUARY, 30);
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yy");
System.out.println(dateFormat.format(instante.getTime()));
 Saída: 02/03/15
 Esperávamos um Exception.
 Time
 LocalDate.of(2015, Month.FEBRUARY, 30);
 DateTimeException
 java.time.DateTimeException: Invalid date 'FEBRUARY 30'
Fim
Obrigado!

Mais conteúdo relacionado

Semelhante a Java - Bibliotecas Date, Calendar e Time

Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01Daniel Alves
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01rollbackpt
 
Periódicos MundoJ e Java Magazine Fevereiro 2012
Periódicos MundoJ e Java Magazine Fevereiro 2012Periódicos MundoJ e Java Magazine Fevereiro 2012
Periódicos MundoJ e Java Magazine Fevereiro 2012rogerlista
 
Inovações Na Plataforma Java
Inovações Na Plataforma JavaInovações Na Plataforma Java
Inovações Na Plataforma JavaFilipe Portes
 
Apresentação java
Apresentação javaApresentação java
Apresentação javamunosai
 
agendamento de tarefas com java se e ee
agendamento de tarefas com java se e eeagendamento de tarefas com java se e ee
agendamento de tarefas com java se e eeelliando dias
 
Finalmente java sabe trabalhar com data e hora (gu java sc)
Finalmente java sabe trabalhar com data e hora (gu java sc)Finalmente java sabe trabalhar com data e hora (gu java sc)
Finalmente java sabe trabalhar com data e hora (gu java sc)Michel Graciano
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem JavaUFPA
 
Migrando aplicações do mundo real para o java se 8
Migrando aplicações do mundo real para o java se 8Migrando aplicações do mundo real para o java se 8
Migrando aplicações do mundo real para o java se 8janario
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java FundamentosWilson Lima
 

Semelhante a Java - Bibliotecas Date, Calendar e Time (20)

Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Periódicos MundoJ e Java Magazine Fevereiro 2012
Periódicos MundoJ e Java Magazine Fevereiro 2012Periódicos MundoJ e Java Magazine Fevereiro 2012
Periódicos MundoJ e Java Magazine Fevereiro 2012
 
Java no Google App Engine - TDC2011
Java no Google App Engine - TDC2011Java no Google App Engine - TDC2011
Java no Google App Engine - TDC2011
 
O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!
 
Inovações Na Plataforma Java
Inovações Na Plataforma JavaInovações Na Plataforma Java
Inovações Na Plataforma Java
 
1.introducao java
1.introducao java1.introducao java
1.introducao java
 
Apresentação java
Apresentação javaApresentação java
Apresentação java
 
agendamento de tarefas com java se e ee
agendamento de tarefas com java se e eeagendamento de tarefas com java se e ee
agendamento de tarefas com java se e ee
 
Finalmente java sabe trabalhar com data e hora (gu java sc)
Finalmente java sabe trabalhar com data e hora (gu java sc)Finalmente java sabe trabalhar com data e hora (gu java sc)
Finalmente java sabe trabalhar com data e hora (gu java sc)
 
Java 01
Java 01Java 01
Java 01
 
1409243945064
14092439450641409243945064
1409243945064
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem Java
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 
Migrando aplicações do mundo real para o java se 8
Migrando aplicações do mundo real para o java se 8Migrando aplicações do mundo real para o java se 8
Migrando aplicações do mundo real para o java se 8
 
01 introducao ao java
01   introducao ao java01   introducao ao java
01 introducao ao java
 
Minicurso Java
Minicurso JavaMinicurso Java
Minicurso Java
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
 

Java - Bibliotecas Date, Calendar e Time

  • 1. JAVA 8 Java. Date, java.Calendar e java.Time Manipulando Datas
  • 2. Objetivos 1. Problemas existentes com as bibliotecas de data do Java; 2. Nova API para manipulação de datas no Java 8; 3. Códigos exemplificando.
  • 3. API java.Date  Desde janeiro de 1996  Java 1.0  Depreciada  Mutabilidade  Integração com JDBC  Contém um instante no tempo (em ms)  Precisa implementar a lógica  Não possui operação de manipulação de datas  Sem Timezones (internacionalização)  Horário de Brasília ou de Nova York?  String com formato americano
  • 4. API java.Date  Exemplos:  Inconsistência: Date date = new Date(2009, 2, 1); //Criação de uma data cujo o ano será 3909
  • 5. API java.Calendar  Java 1.1  Ainda Mutável  Sem “Thread Safe”  Não pode formatar datas diretamente  Aritméticas de datas  Complicado, porém possível  Define localização (localTimeZone)  Algumas funções depreciadas
  • 6. API java.Calendar  Exemplo:  Inconsistência: Calendar calendar = new GregorianCalendar(2014, 0, 20); // Os meses variam de 0-11 (Janeiro à Dezembro, respectivamente) //Criando uma data: 20/01/2014
  • 7. Exemplo - Mutabilidade  java.Calendar: Calendar data = new GregorianCalendar(2004, 2, 13); cliente.setVencimento(data); Calendar doisDiasDepois = cliente.getVencimento(); doisDiasDepois.add(Calendar.DAY_OF_MONTH, 2); outroCliente.setVencimento(doisDiasDepois); // efeito colateral: System.out.println(cliente.getVencimento());
  • 8. Exemplo - Imutabilidade  Classe String String s = “java”; s.toUpperCase(); // Letras maiúsculas System.out.println(s);
  • 9. Análise – Date e Calendar  Inconsistência  Mutabilidade  Não-padronizável  Não-formatável  Mínima manipulação
  • 10. Joda Time  Desde 2002  API Open Source  Muito utilizada  Soluciona várias deficiências das outras bibliotecas  Imutabilidade
  • 11. API java.Time  Imutabilidade  “Thread-Safe”  Padronizada (ISO-8601)  Novo conceito  Data para computadores • Continuous  Data para humanos • Human  Tipos Específicos  LocalDateTime  LocalDate  LocalTime
  • 12. API java.Time  Exemplo:  Imutabilidade/Thread-Safe: LocalDate hoje = LocalDate.now(); //2015-01-20 hoje.plusDays(1); // Tentando atribuir +1 ao dia System.out.println(hoje); //2015-01-20 (ainda é hoje, e não amanhã!) LocalDate hoje = LocalDate.now(); LocalDate amanha = hoje.plusDays(1); // somando 1 dia boolean mesmoObjeto = hoje == amanha; //false, já que é imutável
  • 13. Características java.Time  Baseada em padrões  ISO-8601  Imutável  LocalDate date = LocalDate.date(2009, 1, 1); // Criando  date = date.withYear(2014); // Alterando com nova invocação  Interfaces Fluentes  date = date.withYear(2014).withMonthOfYear(1).withDayOfMonth(20); // Legibilidade  Clareza  date = date.withYear(2014).withMonthOfYear(1).withDayOfMonth(20);  date = date.minusYears(2); // Resulta em 2014-01-18  Extensível  Pontos de extensão
  • 14. Calendar versus Time  Calendar  Calendar mesQueVem = Calendar.getInstance();// Criando uma data mesQueVem.add(Calendar.MONTH, 1); // Adicionando +1 ao mês  Time  LocalDate mesQueVem = LocalDate.now().plusMonths(1);
  • 15. Calendar versus Time  Calendar  Calendar instante = Calendar.getInstance(); instante.set(2015, Calendar.FEBRUARY, 30); SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yy"); System.out.println(dateFormat.format(instante.getTime()));  Saída: 02/03/15  Esperávamos um Exception.  Time  LocalDate.of(2015, Month.FEBRUARY, 30);  DateTimeException  java.time.DateTimeException: Invalid date 'FEBRUARY 30'
  • 16.