Java SimpleDateFormat – Formato de Data em Java

Introdução

As classes SimpleDateFormat e DateFormat em Java são usadas para formatação de datas. Elas são principalmente utilizadas quando precisamos exibir ou utilizar funcionalidades de data e hora em Java. Ambas essas classes estão presentes no pacote com.text.

Java DateFormat

  • A classe DateFormat é utilizada para formatar uma data em uma String com base na localidade específica fornecida como entrada.
  • A localidade é usada para especificar a região e o idioma, tornando o código mais adaptado ao usuário.
  • A forma de escrever datas difere em diferentes regiões do mundo. Por exemplo, 31 de dezembro de 2017 seria escrito na Índia como 31-12-2017, mas nos Estados Unidos seria escrito 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á obsoleto 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 é a localidade.

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 irá formatar a data no idioma francês (fr) e na região França (FR):

Output
3 janv. 2018

Usando getTimeInstance()

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

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

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 irá formatar o tempo no idioma francês (fr) e na região França (FR):

Output
11:03:01

Java SimpleDateFormat

A classe `SimpleDateFormat` é semelhante à classe `DateFormat`. A única diferença principal entre elas é que `SimpleDateFormat` pode ser usada 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 possui 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 `String` `pattern` é 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 mês:

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

Exemplos

Vamos agora ver alguns exemplos para 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 então 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 de “2 de janeiro de 2018″ como ” 01-02-2018 “.

Para analisar o horário, precisamos alterar o padrão ao criar uma 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 “deslocamento do fuso horário em horas (padrão RFC)”.

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

Usando parse()

O parsing é a conversão de String em uma instância de java.util.Date. Podemos fazer o parse de uma string para uma instância de data usando o método parse() da classe SimpleDateFormat. Para fazer o parse de 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);

Isto irá produzir uma data (12-01-2018) sem um horário especificado:

Output
Sat Dec 01 00:00:00 IST 2018

Agora vamos olhar um exemplo de SimpleDateFormat para fazer o parse do tempo.

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

Isto irá produzir 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

Nós trabalhamos com Locale como parte do DateFormat e vimos que os locales são usados com base em 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 irá formatar o horário 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 o SimpleDateFormat e DateFormat do Java.

Referência:

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