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 umaString
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 como31-12-2017
, mas a mesma coisa será escrita nos Estados Unidos da América 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á 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
):
Output3 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
):
Output11: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
”:
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 “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
”:
Output13: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:
OutputSat 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:
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
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
):
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 SimpleDateFormat
e DateFormat
em Java.
Referência:
Source:
https://www.digitalocean.com/community/tutorials/java-simpledateformat-java-date-format