JSR 310: Uma nova forma de lidar com datas e horas



Documentos relacionados
Desktop em minutos com genesis, Matisse, Java WebStart e JSR-296

Desenvolvendo aplicações desktop em Java: presente e futuro

Acelerando o desenvolvimento de aplicações desktop

Novos tempos: javax.time Conheça a nova especificação de Data e Hora

Fábio Magalhães RA015998

Java Programação para Fábrica de Software. Fernando Lozano Consultor 4Linux

Figura 1. A Classe Java

Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados. Prof. Josenildo Silva jcsilva@ifma.edu.br

DESENVOLVIMENTO PARA DISPOSITIVOS MÓVEIS. PROFª. M.Sc. JULIANA H Q BENACCHIO

UFG - Instituto de Informática

Aula 1 Acesso a Banco de Dados

Especificação do 3º Trabalho

Java SE 7 e o futuro da linguagem Java

Programação em JAVA. Subtítulo

Agregador de feeds RSS para dispositivos móveis

Exercícios de Revisão Java Básico

MANUAL DE PREENCHIMENTO DE FORMULÁRIO DO PIC.

Integração ADMRH com AGROSYS

Aplicações Desktop: Swing/SubMacroForms. Carlos Renato Alves Gouveia Novembro/2008

Manual do Google agenda. criação e compartilhamento de agendas

MAC-0462 Padrões arquiteturais para sistemas baseados em componentes reconfiguráveis

2ª LISTA DE EXERCÍCIOS CLASSES E JAVA Disciplina: PC-II. public double getgeracaoatual() {return geracaoatual;}

Adriano Reine Bueno Rafael Barros Silva

UFG - Instituto de Informática

Formação em JAVA. Subtítulo

INSTITUTO DE COMPUTAÇÃO UNICAMP 1o. SEMESTRE DE Profa. Cecília M. F. Rubira

Desenvolvimento Web com Framework Demoiselle versão 1.0

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

Funções básicas Cronograma Cronograma Funções Básicas

IBM Managed Security Services for Agent Redeployment and Reactivation

Headphone Estéreo Sem Fio (Bluetooth)

Ordem dos Advogados do Brasil. Exame da Ordem

Documentação Usando o Javadoc

Apresentação do UniSAC

Passo-a-passo para acesso ao novo sistema de reservas de salas no Rochaverá

SECRETARIA GERAL DAS RELAÇÕES EXTERIORES INSTITUTO RIO BRANCO LXIV CURSO DE APERFEIÇOAMENTO DE DIPLOMATAS

JAVA Express com Lógica

AULA 12 CLASSES DA API JAVA. Disciplina: Programação Orientada a Objetos Professora: Alba Lopes alba.lopes@ifrn.edu.br

Modelo de Dados Relacional Restrições de um Banco de Dados Relacional

MANUAL DE USO DO PORTAL DA SECRETARIA MUNICIPAL DE EDUCAÇÃO

Introdução à Linguagem Java

Especificação do Trabalho Prático

[CANCELAR] - Limpa todos os campos e desabilita campos e botões, exceto [NOVO] e [PESQUISAR].

O Tour Virtual é uma ferramenta capaz de apresentar cada detalhe do ambiente e tornar o seu produto mais. atraente.

Java Internationalization (i18n)

4.1 A Parte que recebeu a notificação de anormalidade deverá encaminhá-la imediatamente a um órgão responsável, para resolver a anormalidade.

REGULAMENTO DO RANKING PARAIBANO 2015

Introdução aos critérios de consulta. Um critério é semelhante a uma fórmula é uma cadeia de caracteres que pode consistir em

CONSELHOS DE IMIGRAÇÃO PARA OS PROFISSIONAIS

Melhores práticas no planejamento de recursos humanos

Palavras-chave: i3geo, gvsig, Mapserver, integração, plugin. Contato: ou

A Área de Marketing no Brasil

Curso - Padrões de Projeto Módulo 2: Padrões de Criação

Sistemas Operacionais Aula 06: Threads. Ezequiel R. Zorzal

OFICINA DA PESQUISA PROGRAMAÇÃO APLICADA À CIÊNCIA DA COMPUTAÇÃO

RESOLUÇÃO Nº 06, DE 07 DE ABRIL DE Regulamenta a elaboração e a defesa de monografia final de curso no Curso de Graduação em Direito da UFMG.

Construtor de sites SoftPixel GUIA RÁPIDO - 1 -

GUIA DO PROGRAMA FORA DE COMPETIÇÃO DA CBAt

OBSERVAÇÕES E PROCEDIMENTOS EM DIAS DE AVALIAÇÃO

CAPÍTULO 2. DEMONSTRAÇÕES FINANCEIRAS, IMPOSTOS, e FLUXO DE CAIXA. CONCEITOS PARA REVISÃO

Backup. Permitir a recuperação de sistemas de arquivo inteiros de uma só vez. Backup é somente uma cópia idêntica de todos os dados do computador?

edirectory Plataforma ios / Android

Novell Vibe 3.4. Novell. 1º de julho de Inicialização Rápida. Iniciando o Novell Vibe. Conhecendo a interface do Novell Vibe e seus recursos

Avanços na transparência

Como mandar mensagens OSC pelo Flash via Flosc

Aula 27 - Agendamento de Tarefas (CRONTAB)

Projeto Demoiselle. Para perguntas e respostas, utilizem a lista de discussões de usuários da comunidade: demoiselle-users@lists.sourceforge.

Preenchimento dos Pedidos de Credenciamento Provisório, Credenciamento 5 anos, Recredenciamento e Aumento de Vagas

Requisitos de Software

ESTATUTO DO GRUPO EXECUTIVO DE RECURSOS HUMANOS DO RIO DE JANEIRO

Android e Bancos de Dados

EXPRESSO LIVRE 2º Encontro Técnico de Desenvolvedores

Integração dos Modelos de Gestão de TI

Introdução ao cálculo financeiro

fx-82ms fx-83ms fx-85ms fx-270ms fx-300ms fx-350ms

Universidade Estadual de Campinas. Faculdade de Tecnologia

Software PHC com MapPoint

Índice: CMS 3 O que é Content Management System? Clientes 4 O que é o Cliente? 4 Configurando o i-menu/i-view para trabalhar. com o CMS.

Métodos de Desenvolvimento de Software. Aula 1: Introdução

Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL

Regulamento da Monografia do Curso de Graduação em Direito

Software Livre e GIS: Quais são as alternativas?

Estratégias para testes: a metáfora da pirâmide alimentar

MÓDULO 9 METODOLOGIAS DE DESENVOLVIMENTO DE SISTEMAS

UNESP Universidade Estadual Paulista Faculdade de Ciências Farmacêuticas

Analista de Sistemas S. J. Rio Preto

made human by tech Neemu

Paradigmas da Programação PPROG. Linguagem JAVA. Interfaces. (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33

Soluções para Automatizar. o atendimento e ter eficiência na central

RELATÓRIO DE ATIVIDADE CURSO DE INICIAÇÃO POLÍTICA ETEC-CEPAM

UNIVERSIDADE DE SANTA CRUZ DO SUL UNISC CURSO DE ENGENHARIA DE COMPUTAÇÃO REGULAMENTO DO TRABALHO DE CONCLUSÃO CAPÍTULO I DA NATUREZA

Análise dos Softwares Livres de Edição de Vídeo. Wille Marcel

Orientação a Objetos

Feature-Driven Development

Capítulo 04: Persistência com SQLite

Manual para Cadastro de Questões Prova Colegiada / Professor

Portando Jogos Mobile com Escala. Tarcisio Pinto Camara

Transcrição:

JSR 310: Uma nova forma de lidar com datas e horas Fábio Kung Michael Nascimento Santos JustJava 2007

Fábio Kung 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 2

Michael Nascimento Santos 8 anos de experiência com Java Co-líder da JSR-310 (Date and Time API) Expert nas JSRs 207, 250, 270 (Java 6), 296 (Swing Application Framework), 303 (Bean Validation) Co-fundador do SouJava Fundador do genesis ( https://genesis.dev.java.net ) e do ThinNB ( https://thinnb.dev.java.net ) Palestrante no JavaOne, JustJava, Abaporu, FISL, COMDEX, BrasilOne e Conexão Java 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 3

Agenda Problemas das APIs do JDK Alternativas Início da JSR Decisões, design e conceitos Exemplos Pontos em aberto Como participar 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 4

Problemas das APIs do JDK java.util.date Parte do JDK 1.0 Usa dois dígitos para o ano, com base em 1900 Os meses são baseados em zero (Janeiro 0 ~ Dezembro - 11) Deveria ser imutável Não atendia aos requisitos de localização Quase totalmente deprecated 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 5

Problemas das APIs do JDK java.util.calendar Introduzida no JDK 1.1 Baseada em constantes int, sem tipagem forte Sem um construtor que receba Date Os meses são baseados em zero (Janeiro 0 ~ Dezembro - 11) Deveria ser imutável Performance anti-pla e cheio de bugs Representando internamente de duas formas Um valor por campo Milisegundos a partir de 1970 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 6

Problemas das APIs do JDK java.text.simpledateformat Requer um Date Não é possível formatar diretamente um Calendar Não é thread-safe Diversos problemas difíceis de reproduzir podem ocorrer em produção Vários RFEs presentes no banco de bugs do JDK para torná-la thread-safe 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 7

Problemas das APIs do JDK java.util.timezone Regras hardcoded Não possui acesso às regras Problemas quando regras são incompatíveis para um mesmo TimeZone em duas JVMs Não permite especificar regras mais complexas presentes no mundo real nem mudanças nas regras (Brasil / Venezuela) 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 8

Problemas das APIs do JDK TimeZone implícito Sem API para datas sem hora e horas Sem API para representar durações, ex: 3 dias Sem API para representar períodos, i.e., 05/10/2007 13:00~14:00 Formato de serialização inapropriado Resultados inesperados na serialização entre JVMs distintas Dificuldade de trabalhar com outros sistemas de calendário 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 9

Exemplo: Date Date date = new Date(2007, 10, 5, 13, 0, 0); System.out.println(date.toString()); 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 10

Exemplo: Date Date date = new Date(2007, 10, 5, 13, 0, 0); System.out.println(date.toString()); Tue Nov 05 13:00:00 GMT-03:00 3907 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 11

Exemplo: Date int ano = 2007 1900; int mes = 10 1; Date date = new Date(ano, mes, 5, 13, 0, 0); System.out.println(date.toString()); Fri Oct 05 13:00:00 GMT-03:00 2007 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 12

Exemplo: Calendar / DateFormat TimeZone tz = TimeZone.getTimeZone("America/Manaus"); Calendar cal = Calendar.getInstance(tz); cal.set(2007, Calendar.OCTOBER, 5, 13, 0, 0); DateFormat f = new SimpleDateFormat("dd/MM/yyyy HH:mm"); System.out.println(f.format(cal)); 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 13

Exemplo: Calendar / DateFormat TimeZone tz = TimeZone.getTimeZone("America/Manaus"); Calendar cal = Calendar.getInstance(tz); cal.set(2007, Calendar.OCTOBER, 5, 13, 0, 0); DateFormat f = new SimpleDateFormat("dd/MM/yyyy HH:mm"); System.out.println(f.format(cal)); java.lang.illegalargumentexception: Cannot format given Object as a Date at java.text.dateformat.format at java.text.format.format 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 14

Exemplo: Calendar / DateFormat TimeZone tz = TimeZone.getTimeZone("America/Manaus"); Calendar cal = Calendar.getInstance(tz); cal.set(2007, Calendar.OCTOBER, 5, 13, 0, 0); DateFormat f = new SimpleDateFormat("dd/MM/yyyy HH:mm"); Date date = cal.gettime(); System.out.println(f.format(date)); 05/10/2007 14:00 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 15

Exemplo: Calendar / DateFormat TimeZone tz = TimeZone.getTimeZone("America/Manaus"); Calendar cal = Calendar.getInstance(tz); cal.set(2007, Calendar.OCTOBER, 5, 13, 0, 0); DateFormat f = new SimpleDateFormat("dd/MM/yyyy HH:mm"); f.settimezone(cal.gettimezone()); Date date = cal.gettime(); System.out.println(f.format(date)); 05/10/2007 13:00 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 16

Alternativas hoje Bibliotecas utilitárias Feitas para a empresa/projeto Difíceis de desenvolver, repletas de bugs etc. Time and Money ( http://timeandmoney.sourceforge.net ) Continua trabalhando em cima de Date e Calendar Sofre dos mesmos problemas de performance e serialização Joda-Time ( http://joda-time.sourceforge.net ) Substitui completamente Date e Calendar Estável, existe há 3 anos Opção mais recomendada 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 17

JSR-310: Início Usuários do Joda-Time que apóiam padrões pediam constantemente uma JSR No 2o semestre/2006, finalmente foi decidido iniciar a JSR No início de 2007, foi submetida por Michael Nascimento Santos e Stephen Colebourne, com o apoio de 17 membros do JCP Aprovada com 16 votos sim, zero não e 1 abstenção Conduzida em público - https://jsr-310.dev.java.net/ 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 18

Decisões Não usa diretamente código do Joda-Time Há conceitos muito específicos Não temos o copyright de todo o código Compatibilidade com Java 5 Pode mudar para Java 7 se houver operator overloading Suporte ao padrão ISO-8601 Precisão de nanos, ao invés de milis Sustitui API antiga, mantendo interoperabilidade sempre que possível 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 19

Princípios de design Imutabilidade Fluent API Clara, explícita e age como esperado (PLA) Extensível 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 20

Conceitos Instants/timestamps: pontos únicos na linha do tempo Human-scale datetimes/timepoints: baseados em campos, completos (podem ser convertidos para instantes) ou incompletos Interval: um intervalo aberto entre dois instants Duration (antes Period): representa o conceito de 1 semana, 2 dias, 3 horas Recurrent time: toda segunda quarta-feira do mês Calendar systems & timezones 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 21

Outros aspectos a serem considerados Formatação Parsing Serialização Atualização das informações de TimeZone Horário da JVM Interoperabilidade com a API antiga Proposta de atualização de APIs existentes (dependem das respectivas JSRs): JDBC JPA 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 22

Exemplo: Construindo datas CalendarDay date = calendarday(2007, 3, 20); date = calendarday(year(2007), march(), dayofmonth(20)); date = calendar().year(2007).december().dayofmonth(20).buildlenient(); date = calendar().year(1972).december().dayofmonth(3).build(); date = calendar().currentyear().december().dayofmonth(20).buildlenient(); date = calendar().zoneid("america/manaus").year(2007).august().dayofmonth(2).build(); 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 23

Exemplo: Manipulando datas e horas TimeOfDay tod = currenttime(); tod = tod.plushours(6).plusminutes(2); tod = tod.plus(hours(6), minutes(2)); // com operator overloading: // tod += hours(6); CalendarDay date = today(); date = today().plusdays(3); date = today().plus(days(3)); date = now().today().plus(days.days(3)); // com operator overloading: // date += days(3); // date += 3; 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 24

Pontos em aberto Grau de precisão das classes Tipos para tudo Classe genérica parametrizável Enums sempre que possível Integração com a JSR-275 (Units) Suporte a leap seconds Sistemas de calendário a serem suportados Grau de padronização do acesso e atualização das classes de TimeZone Interoperabilidade com XMLGregorianCalendar (limitaria as opções de design) 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 25

Como participar Tudo é público em: https://jsr-310.dev.java.net/ Implementação de referência no repositório Subversion Todas as questões de design, princípios, conceitos, pontos em aberto, propostas, casos de uso no Wiki Lista pública de discussão no site do projeto Até o momento, nenhuma discussão ou decisão ocorreu em particular 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 26

Perguntas? 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 27

Obrigado! https://jsr-310.dev.java.net/ http://blog.michaelnascimento.com.br/ Michael Nascimento - michael@summa-tech.com Fábio Kung JustJava 2007 30/01/2008 JSR 310: Uma nova forma de lidar com datas e horas 28