Java SimpleDateFormat – Formato de Data Java

Introdução

As classes SimpleDateFormat e DateFormat do Java são usadas para formatação de datas. Elas são principalmente utilizadas onde precisamos exibir ou utilizar a funcionalidade de data e hora do Java. Ambas as classes estão presentes no pacote com.text.

Java DateFormat

  • DateFormat é usado para formatar uma data em uma String com base em uma localidade específica fornecida como entrada.
  • A localidade é usada para especificar a região e o idioma para tornar o código mais adequado ao usuário.
  • A forma de escrever datas é diferente em diferentes regiões do mundo. Por exemplo, 31 de dez de 2017 será escrito na Índia como 31-12-2017, mas a mesma coisa será escrita nos Estados Unidos da América como 12-31-2017.
  • As classes DateFormat não são sincronizadas, é recomendável criar uma instância separada para cada thread.

A DateFormat object can be created using the getDateInstance() and getTimeInstance() method of the DateFormat class.

Locale loc = new Locale("en", "US");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, loc);

Nota: O construtor Locale(String, String) está depreciado desde a versão 19

Locale loc = new Locale.Builder().setLanguage("en").setRegion("US").build();

O método getDateInstance de DateFormat precisa de dois parâmetros de entrada. O primeiro parâmetro especifica o DateFormat a ser usado e o segundo parâmetro é o local.

Usando format

A classe DateFormat possui um método format que é responsável pela formatação.

Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);

Este código formatará a data no idioma francês (fr) e na região da França (FR):

Output
3 janv. 2018

Usando getTimeInstance()

Para criar uma instância de DateFormat, estamos utilizando o método getDateInstance().

Para realizar a formatação de hora, precisamos de uma instância de hora. Usaremos o método getTimeInstance() para obter uma instância de hora.

Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);

Este código formatará a hora no idioma francês (fr) e na região da França (FR):

Output
11:03:01

Java SimpleDateFormat

SimpleDateFormat é semelhante ao DateFormat. A única diferença principal entre eles é que SimpleDateFormat pode ser usado para formatação (conversão de Date para String) e para análise (conversão de String para Date) com suporte a localidade, enquanto DateFormat não tem suporte a localidade. DateFormat é uma classe abstrata que fornece suporte básico para formatação e análise de datas. SimpleDateFormat é a classe concreta que estende a classe DateFormat.

SimpleDateFormat pode ser criado usando o construtor SimpleDateFormat. O construtor é um construtor parametrizado e precisa de um padrão de String como parâmetro.

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

A pattern de String é o padrão que será usado para formatar uma data e a saída será gerada nesse padrão como “MM-dd-yyyy“.

Padrões

Vamos dar uma olhada na sintaxe do padrão que deve ser usado para o padrão de formatação.

Letter for Pattern Date or Time component Examples
G Era designator AD
y Year 2018 (yyyy), 18 (yy)
M Month in year July (MMMM), Jul (MMM), 07 (MM)
w Results in week in year 16
W Results in week in month 3
D Gives the day count in the year 266
d Day of the month 09 (dd), 9(d)
F Day of the week in month 4
E Day name in the week Tuesday, Tue
u Day number of week where 1 represents Monday, 2 represents Tuesday and so on 2
a AM or PM marker AM
H Hour in the day (0-23) 12
k Hour in the day (1-24) 23
K Hour in am/pm for 12 hour format (0-11) 0
h Hour in am/pm for 12 hour format (1-12) 12
m Minute in the hour 59
s Second in the minute 35
S Millisecond in the minute 978
z Timezone Pacific Standard Time; PST; GMT-08:00
Z Timezone offset in hours (RFC pattern) -0800
X Timezone offset in ISO format -08; -0800; -08:00

Algumas letras devem ser usadas em diferentes quantidades para resultados diferentes, como para o mês:

Type Pattern Example Output
Full Month MMMM July
Abbreviated Month MMM Jul
Numeric Month MM 07

Exemplos

Vamos agora olhar alguns exemplos de diferentes formatos de data e hora.

Pattern Result
MM/dd/yyyy 01/02/2018
dd-M-yyyy hh:mm:ss 02-1-2018 06:07:59
dd MMMM yyyy 02 January 2018
dd MMMM yyyy zzzz 02 January 2018 India Standard Time
E, dd MMM yyyy HH:mm:ss z Tue, 02 Jan 2018 18:07:59 IST

Usando SimpleDateFormat()

Para analisar uma data, precisamos criar uma instância de SimpleDateFormat usando o construtor e depois usar o método format():

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);

Este código irá produzir “MM-dd-yyyy”:

Output
01-02-2018

Este padrão produz “mês no ano”, “dia no mês” e “ano”. O tipo de caractere (e capitalização) e a quantidade de caracteres contribuem para a string. O mês seria representado por dois dígitos, o dia por dois dígitos e o ano por quatro dígitos.

Este código exibiu a data “2 de janeiro de 2018” como “01-02-2018”.

Para analisar o tempo, precisamos mudar o padrão ao criar a instância de SimpleDateFormat.

String pattern = "HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);

Este código irá produzir “HH:mm:ss.SSSZ”:

Output
13:03:15.454+0530

Este padrão produz “horas”, “minutos”, “segundos”, “milissegundos” e “offset de fuso horário em horas (padrão RFC)”.

Este código exibiu o tempo como “13:03:15.454+0530”.

Usando parse()

Análise é a conversão de String em uma instância de java.util.Date. Podemos analisar uma string para uma instância de data usando o método parse() da classe SimpleDateFormat. Para analisar uma String para Data, precisamos de uma instância da classe SimpleDateFormat e um padrão de string como entrada para o construtor da classe.

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("12-01-2018");
System.out.println(date);

Isso resultará em uma data (12-01-2018) sem um horário especificado:

Output
Sat Dec 01 00:00:00 IST 2018

Agora vamos ver um exemplo com SimpleDateFormat para analisar o tempo.

String pattern = "HH:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("22:00:03");
System.out.println(date);

Isso resultará em um horário (22:00:03) sem uma data especificada:

Output
Thu Jan 01 22:00:03 IST 1970

Como não especificamos nenhuma data, o programa considerou a época como a data (ou seja, 01-Jan-1970).

Usando Locale

Trabalhamos com Locale como parte do DateFormat e vimos que locais são usados com base nas regiões.

String pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern, new Locale("fr", "FR"));
Date date = simpleDateFormat.format(new Date());
System.out.println(date);

Este código formatará o tempo atual no idioma francês (fr) e na região da França (FR):

Output
mardi janvier 2018 14:51:02.354+0530

O dia e o mês são nomeados em francês com base no Locale fornecido como entrada – mardi é “terça-feira” e janvier é “janeiro”.

Conclusão

Neste artigo, você aprendeu sobre SimpleDateFormat e DateFormat em Java.

Referência:

Source:
https://www.digitalocean.com/community/tutorials/java-simpledateformat-java-date-format