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 umaString
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 como31-12-2017
, mas nos Estados Unidos seria escrito como12-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
):
Output3 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
):
Output11: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
“:
Output01-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
“:
Output13: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:
OutputSat 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:
OutputThu 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
):
Outputmardi 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