• Skip to primary navigation
  • Skip to content

Mauda

IT, Java and Music

Graduação   SCJP   Mestrado
  • Apresentação
  • Certificação Java
  • JPA
    • Exceptions
  • JSF
  • Versionamento
  • Contato

Conversão de Datas – classe SimpleDateFormat – Formatos de Datas

May 16, 2016 by Mauda Leave a Comment

Conteúdo do Post:
  1. Formato de Datas
  2. Regras para criar formato de Datas
  3. finnaly{

Olá Pessoal, tudo bom?

Semana passada nós começamos a observar um código relacionado com conversão de datas, como você pode ver no seguinte link. O primeiro ponto para melhorarmos aquele código está na parte de formatação de datas. A fim de elucidar alguns conhecimentos a respeito disso, nós iremos explanar um pouco a respeito da classe SimpleDateFormat que auxilia a formatar datas. Após essa explanação, semana que vem continuamos a melhorar aquele código do link acima.

Formato de Datas

O primeiro aspecto a ser tratado para resolver os problemas do teste será o formato de datas. Nós temos que os testes 3 e 4 ignoraram completamente o formato das datas passado. Assim o primeiro aspecto aqui é a utilização de uma classe Java chamada java.text.SimpleDateFormat, aqui está sua API.

O funcionamento dessa classe ocorre da seguinte forma, nós passamos um formato de data, respeitando algumas regras, e depois podemos realizar a formatação de uma instância da classe java.util.Date em String ou a criação de uma instância da classe java.util.Date a partir de uma String.

Regras para criar formato de Datas

O formato de Datas é uma String formada por vários caracteres. Cada um desses caracteres representam uma unidade de tempo, como Dia, Mês, Ano, Hora, Minuto entre outras.

Os principais caracteres estão descritos na tabela abaixo. Repare que existem diferenças entre os caracteres maiúsculos e minúsculos.

 

Caracter Unidade de Tempo Representação Exemplo
G Designador da Era Text AD (Anno Domini) ;d.C.
y Ano Year 1996; 96
Y Week year((Considera a primeira semana completa do ano, por exemplo, primeiro de janeiro de 2014 caiu em uma quarta, assim se formatarmos uma data no dia 29, 30 ou 31 de dezembro de 2013, ele irá exibir o ano 2014.)) Year 2009; 09
M Mês do Ano Month Maio, Mai, 05, 5
L Mês do Ano ((Existe uma diferença entre o de cima, mas não consegui identificar, quando encontrar atualizo aqui)) Month Maio, Mai, 05, 5
w Semana do Ano Number 21
W Semana do Mês Number 2
D Dia do Ano Number 189
d Dia do Mês Number 10
F Dia da Semana no Mês((Por exemplo, hoje 16/05/2016, irá produzir o número 3, porque é a terceira segunda do mês)) Number 2
E Nome do Dia Text Segunda; Seg
u Número do Dia da Semana ((Se o calendário está configurado para que o Domingo seja o primeiro dia da semana, então este será 1, 2 para segunda e assim por diante até o sábado que será o 7. Se estiver configurado para começar a semana na segunda, então o 1 será segunda e 7 será o domingo)) Number 1
a Marcador de AM/PM Text AM; PM
H Hora do Dia começando as 00 horas (0-23) Number 0
k Hora do Dia começando as 01 horas (1-24) Number 24
K Hora do Dia em am/pm começando as 00 horas (0-11) Number 0
h Hora do Dia em am/pm começando as 01 horas (1-12) Number 12
m Minutos da Hora Number 30
s Segundos do Minuto Number 55
S MIlisegundos do Minuto Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800
X Time zone ISO 8601 time zone -08; -0800; -08:00

A parte de representação será explicada em um futuro artigo, mas se você quiser explorar dá uma olhada na API do SimpleDateFormat. Além disso também ficarei devendo uma explicação sobre timezone, que ficará para um artigo futuro.

Abaixo está um teste que usa a ferramenta JUnit para imprimir algumas formatações das datas da data atual. Para facilitar esse código está disponível no projeto Exemplos no Repositório Git do Bitbucket. Se você não sabe como clonar um repositório, veja meus tutoriais Versionamento Git na IDE Eclipse.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package br.com.mauda.exemplos.simpleDateFormat.exemplo001;
 
import java.text.SimpleDateFormat;
import java.util.Date;
 
import org.junit.Test;
 
public class Teste {
@Test
public void teste(){
Date data = new Date();//Pega a data atual
System.out.println("\nFormato: " + "yyyy.MM.dd G 'at' HH:mm:ss z");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z");
System.out.println("Formato Aplicado: " + sdf.format(data));
 
System.out.println("\nFormato: " + "EEE, MMM d, ''yy");
sdf = new SimpleDateFormat("EEE, MMM d, ''yy");
System.out.println("Formato Aplicado: " + sdf.format(data));
 
System.out.println("\nFormato: " + "h:mm a");
sdf = new SimpleDateFormat("h:mm a");
System.out.println("Formato Aplicado: " + sdf.format(data));
 
System.out.println("\nFormato: " + "hh 'o''clock' a, zzzz");
sdf = new SimpleDateFormat("hh 'o''clock' a, zzzz");
System.out.println("Formato Aplicado: " + sdf.format(data));
 
System.out.println("\nFormato: " + "K:mm a, z");
sdf = new SimpleDateFormat("K:mm a, z");
System.out.println("Formato Aplicado: " + sdf.format(data));
 
System.out.println("\nFormato: " + "yyyyy.MMMMM.dd GGG hh:mm aaa");
sdf = new SimpleDateFormat("yyyyy.MMMMM.dd GGG hh:mm aaa");
System.out.println("Formato Aplicado: " + sdf.format(data));
 
System.out.println("\nFormato: " + "EEE, d MMM yyyy HH:mm:ss Z");
sdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
System.out.println("Formato Aplicado: " + sdf.format(data));
 
System.out.println("\nFormato: " + "yyMMddHHmmssZ");
sdf = new SimpleDateFormat("yyMMddHHmmssZ");
System.out.println("Formato Aplicado: " + sdf.format(data));
 
System.out.println("\nFormato: " + "yyyy-MM-dd'T'HH:mm:ss.SSSZ");
sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
System.out.println("Formato Aplicado: " + sdf.format(data));
 
System.out.println("\nFormato: " + "yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
System.out.println("Formato Aplicado: " + sdf.format(data));
 
System.out.println("\nFormato: " + "YYYY-'W'ww-u");
sdf = new SimpleDateFormat("YYYY-'W'ww-u");
System.out.println("Formato Aplicado: " + sdf.format(data));
}
}

A execução desse teste irá gerar o seguinte texto no Console do Eclipse:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Formato: yyyy.MM.dd G 'at' HH:mm:ss z
Formato Aplicado: 2016.05.15 d.C. at 20:14:40 BRT
 
Formato: EEE, MMM d, ''yy
Formato Aplicado: Dom, mai 15, '16
 
Formato: h:mm a
Formato Aplicado: 8:14 PM
 
Formato: hh 'o''clock' a, zzzz
Formato Aplicado: 08 o'clock PM, Fuso horário de Brasília
 
Formato: K:mm a, z
Formato Aplicado: 8:14 PM, BRT
 
Formato: yyyyy.MMMMM.dd GGG hh:mm aaa
Formato Aplicado: 02016.Maio.15 d.C. 08:14 PM
 
Formato: EEE, d MMM yyyy HH:mm:ss Z
Formato Aplicado: Dom, 15 mai 2016 20:14:40 -0300
 
Formato: yyMMddHHmmssZ
Formato Aplicado: 160515201440-0300
 
Formato: yyyy-MM-dd'T'HH:mm:ss.SSSZ
Formato Aplicado: 2016-05-15T20:14:40.438-0300
 
Formato: yyyy-MM-dd'T'HH:mm:ss.SSSXXX
Formato Aplicado: 2016-05-15T20:14:40.438-03:00
 
Formato: YYYY-'W'ww-u
Formato Aplicado: 2016-W21-7

Repare que os caracteres utilizados podem ser repetidos conforme a necessidade, variando o seu resultado. Por exemplo, o caracter ‘y’, para a formatação da linha 16 (yyyy) gera um resultado 2016, já a formatação da linha 20 (yy) gera um resultado 16. Assim a combinação caracteres + quantidades pode gerar vários tipos de resultados. Depende do que você necessite em seu código.

finnaly{

O formato de datas é algo muito importante para ajudar na continuação de nosso post sobre melhorar o parser de datas. Caso tenham ficado duvidas ou seguestões envie seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!

Até um próximo post!

Filed Under: Date, Java Tagged With: Date, Formatação de Datas, Java, SimpleDateFormat

About Mauda

Mestre em Informática, Analista de Sistemas, Professor, SCJP e Baterista. Desde 2002 trabalhando no mundo Java e ensinando pessoas sobre desenvolvimento de sistemas. Mais informações

Reader Interactions

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Advertisements

Copyright © 2026 · Genesis Framework · WordPress · Log in