1. Classe DateTimeFormatter
A classe especial DateTimeFormatter
encontra seu caminho na API Date Time. Seu objetivo é tornar o mais fácil possível para os programadores converter uma data e hora no formato exato que desejam. E estamos felizes em informar que os criadores do Java tiveram sucesso.
Usá-lo é muito fácil. Primeiramente, você precisa criar uma DateTimeFormatter
classe e passar em um padrão que especifique como ela irá exibir a data e hora:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);
Onde dtf
é uma DateTimeFormatter
variável. é um método estático da classe. E padrão é uma string que especifica o padrão que será usado para exibir a data e a hora.DateTimeFormatter.ofPattern()
DateTimeFormatter
Exemplos
Código | Saída do console |
---|---|
|
|
No exemplo acima, utilizamos o ofPattern()
método para criar um DateTimeFormatter
objeto baseado no padrão. E na próxima linha, usamos o format()
método para converter um LocalDateTime
objeto em uma string. Você vê o resultado na tela.
Você pode passar quase qualquer objeto da API Date Time para o format()
método.
A estática ofPattern()
também é muito simples: pega um padrão como argumento e retorna um DateTimeFormatter
objeto. A parte mais interessante é encontrada no padrão.
2. Padrão de formatação
A string passada como padrão é usada como padrão ao exibir informações. MM é substituído pelo número do mês, dd pelo dia do mês e yy pelo número do ano. O caso das cartas é importante.
A tabela completa para esses padrões de tempo é esta:
Carta | Significado |
---|---|
y | Ano |
M | Mês |
d | Dia |
H | Horas |
m | Minutos |
s | Segundos |
S | Milésimos de segundo |
n | Nanossegundos. |
Não é particularmente difícil de lembrar.
Mas por que o padrão no exemplo inclui letras repetidas MM, dd e yy? Bem, é aqui que fica mais interessante.
Ideia geral
O número de letras afeta o comprimento do texto. Quanto mais letras houver, mais longo será o texto.
Se a letra H for especificada uma vez, 9 horas serão exibidas como 9, mas se a letra H for especificada duas vezes seguidas, 9 horas serão exibidas como 09.
Se a letra y for especificada 2 vezes seguidas, o ano será escrito com 2 dígitos. Se ocorrer 4 vezes seguidas, serão usados 4 dígitos.
Se a letra M for especificada 2 vezes seguidas, o número do mês será gravado. Se 3 vezes seguidas, o nome do mês (suas 3 primeiras letras) é usado. Se 4 vezes seguidas, o nome completo do mês é usado.
Exemplo:
Código | Saída do console |
---|---|
|
|
3. Tabela completa de padrões
A tabela completa é bem grande e super interessante:
Padrão | Variações do padrão | Exemplo | Descrição |
---|---|---|---|
y | aaaa, aaaa | 19; 2019 | Ano |
M/L | M, MM, MM, MMMM, MMMM | 1; 01; Janeiro; Janeiro; J | Mês |
d | d, dd | 9; 09 | Dia |
H | H, HH | 2; 02 | Horas |
m | m, mm | 3; 03 | Minutos |
s | s, ss | 5; 05 | Segundos |
S | S, SS, SSS, ... | 1; 12; 123 | Milésimos de segundo |
n | n | 123456789 | Nanossegundos |
G | G,GGGG,GGGG | DE ANÚNCIOS; Ano Domini; A; | Era |
Q/q | q, qq, qqq, qqqq | 3; 03; Q3; 3º trimestre | Trimestre |
c | c | 13 | Semana do ano |
C | C | 3 | Semana do mês |
E | EEEE, EEEE, EEEE | Seg; Segunda-feira; M | Dia da semana |
e/c | e, ee, eee, eee, eee | 1; 01; Seg; Segunda-feira; M | Dia da semana |
a | a | PM | AM ou PM |
h | h | 12 | Relógio de 12 horas. |
V | VV | Europa/Helsinque | Fuso horário |
z | z zzzz | EET; Hora Padrão da Europa Oriental | Fuso horário |
O | OOOOO | GMT+2; GMT+02:00 | Fuso horário |
By the way, esta não é realmente uma versão completa. Você pode encontrar a versão mais completa aqui .
4. Tempo de análise
A DateTimeFormatter
classe também é interessante por sua capacidade não apenas de converter uma data e hora em uma string de acordo com um determinado padrão, mas também de realizar a operação inversa!
Analisar uma string é o processo de dividi-la em tokens significativos.
Aqui está o que parece:
Código | Saída do console |
---|---|
|
|
Primeiro, criamos um DateTimeFormatter
objeto e definimos o padrão usado para análise.
Em seguida, chamamos o método LocalDate.parse()
or LocalTime.parse()
ou LocalDateTime.parse()
e passamos a string a ser analisada junto com o DateTimeFormatter
objeto, que entende como analisar o texto passado e qual padrão deve ser utilizado para isso.
Outro exemplo: desta vez vamos analisar o tempo.
Código | Saída do console |
---|---|
|
|
GO TO FULL VERSION