Datas e horas Conceitos fundamentais e as APIs do Java
Hugo KotsuboConteúdo
Toda aplicação precisa lidar com datas. Seja com os casos mais simples, como uma data de nascimento no cadastro de usuários, até os mais complexos, como um rastreamento completo de todos os eventos ocorridos com determinado produto, desde a sua confecção até a venda, com data e hora exatas em que cada etapa ocorreu. No desenvolvimento, é essencial ter um conhecimento maior sobre todos os conceitos envolvendo datas e horas. Sem saber como funcionam os fusos horários e demais detalhes, e como sua linguagem ou framework trabalha com eles, não é possível escrever um código confiável. Como eu sei que estou considerando este ou aquele fuso horário? Como meu código vai se comportar no exato momento em que ocorre a mudança para o horário de verão?
Neste livro, Hugo Kotsubo trata essas e muitas outras questões envolvendo datas. Na primeira parte, você verá todos os conceitos importantes do ponto de vista do desenvolvimento de software. Por ser mais conceitual, essa parte não focará em nenhuma tecnologia ou linguagem específica, sendo interessante a todos os desenvolvedores. Em seguida, você se debruçará sobre as APIs da linguagem Java, começando com java.util.Date e java.util.Calendar, chegando por fim à API java.time, introduzida no Java 8, e que é muito superior à API antiga, em vários aspectos que serão explicados ao longo do livro.
Sumário
Parte 1: Conceitos fundamentais de data e hora
- 1 Que dia é hoje? Que horas são?
- 1.1 Data e hora local
- 2 Fusos horários e os timezones
- 2.1 E assim surgiu o GMT
- 2.2 UTC, o novo GMT
- 2.3 Como funciona o horário de verão
- 2.4 Nada é garantido, nada é para sempre
- 3 Nomenclatura dos timezones e formatos de data
- 3.1 Abreviações de timezone e suas limitações
- 3.2 Timezone e Offset não são a mesma coisa
- 3.3 Datas não têm formato
- 3.4 O formato ISO 8601
- 3.5 Parsing e formatação
- 4 O Unix Epoch e os timestamps
- 4.1 Tenho uma data, como calcular o timestamp?
- 4.2 Devo usar sempre timestamp/UTC?
- 4.3 Nem sempre você precisa do timestamp
- 5 Durações e a bizarra aritmética de datas
- 5.1 Formato ISO 8601 para durações
- 5.2 Somar um dia é o mesmo que somar 24 horas?
- 5.3 Um mês tem quantos dias?
- 6 E vamos ao código?
Parte 2: APIs legadas do Java
- 7 A primeira API de data do Java
- 7.1 java.util.Date não é uma data
- 7.2 Construindo uma data específica
- 7.3 Calendar, uma tentativa de melhorar Date
- 7.4 Usando timezones com Calendar
- 7.5 Calendar aceita qualquer valor
- 8 Formatação usando SimpleDateFormat e Locale
- 8.1 Formatação: converter data para texto
- 8.2 Usar nomes em vez de números
- 8.3 Formatar para ISO 8601
- 9 Parsing com SimpleDateFormat
- 9.1 Parsing: converter texto para data
- 9.2 Cuidado com datas "incompletas"
- 9.3 Parsing usando locales
- 9.4 Parsing de UTC: não ignore o Z!
- 9.5 Com SimpleDateFormat pode (quase) tudo
- 9.6 Parsing de frações de segundo
- 9.7 Usando SimpleDateFormat em ambientes multithread
- 10 Aritmética de datas com Date e Calendar
- 10.1 Como somar 2 horas a um Date?
- 10.2 Prefira usar Calendar
- 10.3 Calcular diferença entre datas
- 10.4 Não confunda duração com data
- 11 As classes de data do pacote java.sql
- 11.1 java.sql.Date e Time não representam uma data e hora específicas
- 11.2 java.sql.Timestamp, o único nome que faz sentido
- 12 Timezones e outros casos de uso
- 12.1 Obtendo informações do timezone
- 12.2 Alguns casos práticos
- 12.3 Sempre há um timezone em ação
- 12.4 De onde o Java pega as informações de timezone
- 12.5 Outros casos de uso
Parte 3: A API java.time
- 13 Princípios básicos do java.time
- 13.1 Classes de data e hora local
- 13.2 Obter a data e hora atual
- 13.3 Manipulando as datas e horas
- 13.4 Ajustes customizados com TemporalAdjuster
- 13.5 Comparando as datas e horas
- 14 Trabalhando com timezones e offsets
- 14.1 Funcionamento básico de ZonedDateTime
- 14.2 Como ZonedDateTime lida com gaps e overlaps
- 14.3 Manipulando o ZonedDateTime
- 14.4 Comparando instâncias de ZonedDateTime
- 14.5 Converter para outro timezone
- 14.6 Combinando as classes locais com ZoneId
- 14.7 Trabalhando somente com offsets
- 15 Instant e TemporalFields
- 15.1 Instant representa um timestamp
- 15.2 Criar um Instant a partir do timestamp
- 15.3 TemporalField e os getters genéricos
- 15.4 Mudando campos do Instant
- 15.5 Usando TemporalField com TemporalQuery
- 16 Aritmética de data e durações no java.time
- 16.1 Somar e subtrair unidades de data e hora
- 16.2 Somando qualquer unidade de tempo
- 16.3 Classes específicas para durações
- 16.4 Somar durações a uma data
- 16.5 Calcular diferenças entre datas
- 17 Formatação com java.time
- 17.1 Usando pattern e locales
- 17.2 Não precisa setar o timezone
- 17.3 Formatar para ISO 8601
- 17.4 Patterns opcionais
- 17.5 Opções avançadas com DateTimeFormatterBuilder
- 18 Parsing com java.time
- 18.1 Devemos indicar o tipo a ser obtido
- 18.2 Pattern opcional e valores predefinidos
- 18.3 Locales, maiúsculas e textos customizados
- 18.4 Validação e modos de parsing
- 18.5 Parsing pode retornar mais de um tipo diferente
- 18.6 Parsing de ISO 8601
- 18.7 Parsing de abreviação de timezone
- 19 Testes e outros casos de uso
- 19.1 Funcionamento básico de java.time.Clock
- 19.2 Manipulando o tempo
- 19.3 Obtendo informações do timezone
- 19.4 Criar um TemporalAdjuster
- 20 Migração entre java.time e API legada
- 20.1 Relação entre Date e as novas classes
- 20.2 Conversões envolvendo Calendar
- 20.3 Conversão entre TimeZone e ZoneId
- 20.4 Classes do pacote java.sql
- 20.5 Quando não converter entre as APIs
- 20.6 Quando misturar as APIs?
- 20.7 Diferenças entre SimpleDateFormat e DateTimeFormatter
- 20.8 Considerações finais
Autor
Hugo Kotsubo
Hugo Kotsubo é Bacharel em Ciência da Computação pela USP e desenvolvedor Java desde 2000, com foco em aplicações web. Possui certificação SCJP e atualmente trabalha com Java no front-end e back-end. Também flerta com outras linguagens (Python, Ruby, Shell Script, Scala) e é fascinado pela complexidade - nem sempre aparente - que envolve datas e horas.
Dados do produto
- Número de páginas:
- 375
- ISBN:
- 978-85-7254-005-6
- Data publicação:
- 03/2019