Introducción
Las clases SimpleDateFormat
y DateFormat
de Java se utilizan para el formato de fechas. Se utilizan principalmente cuando necesitamos mostrar o utilizar la funcionalidad de fecha y hora de Java. Ambas clases están presentes en el paquete com.text
.
Java DateFormat
DateFormat
se utiliza para formatear una fecha en una cadena (String
) según la ubicación específica proporcionada como entrada.- La ubicación se utiliza para especificar la región e idioma, haciendo que el código sea más localizado para el usuario.
- La forma de escribir la fecha es diferente en distintas regiones del mundo. Por ejemplo,
31 de diciembre de 2017
se escribirá en India como31-12-2017
, pero en los Estados Unidos de América se escribirá como12-31-2017
. - Las clases
DateFormat
no están sincronizadas; se recomienda crear una instancia separada para cada hilo.
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: El constructor Locale(String, String) está obsoleto desde la versión 19.
Locale loc = new Locale.Builder().setLanguage("en").setRegion("US").build();
El método getDateInstance
de DateFormat
necesita dos parámetros de entrada. El primer parámetro especifica el DateFormat
a utilizar y el segundo parámetro es la configuración regional.
Usando format
La clase DateFormat
tiene un método format
que se encarga de formatear.
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 formateará la fecha en francés (fr
) y en la región de Francia (FR
):
Output3 janv. 2018
Usando getTimeInstance()
Para crear una instancia de DateFormat
estamos utilizando el método getDateInstance()
.
Para realizar un formato de tiempo, necesitamos una instancia de tiempo. Utilizaremos el método getTimeInstance()
para obtener una instancia de tiempo.
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 formateará el tiempo en francés (fr
) y en la región de Francia (FR
):
Output11:03:01
Java SimpleDateFormat
SimpleDateFormat
es similar a DateFormat
. La única diferencia importante entre ellos es que SimpleDateFormat
se puede usar para el formato (conversión de Date
a String
) y para el análisis (String
a conversión de Date
) con soporte de idioma, mientras que DateFormat
no tiene soporte de idioma. DateFormat
es una clase abstracta que proporciona soporte base para el formato y análisis de fechas. SimpleDateFormat
es la clase concreta que extiende la clase DateFormat
.
SimpleDateFormat
se puede crear utilizando el constructor SimpleDateFormat
. El constructor es un constructor parametrizado y necesita un patrón de tipo String como parámetro.
String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
El pattern
de tipo String
es el patrón que se utilizará para dar formato a una fecha y la salida se generará en ese patrón como “MM-dd-yyyy
“.
Patrones
Echemos un vistazo a la sintaxis del patrón que se debe utilizar para el formato.
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 |
Algunas letras deben usarse en diferentes cantidades para obtener resultados diferentes, como en el caso del mes:
Type | Pattern | Example Output |
---|---|---|
Full Month | MMMM |
July |
Abbreviated Month | MMM |
Jul |
Numeric Month | MM |
07 |
Ejemplos
Ahora veamos algunos ejemplos de diferentes formatos de fecha y 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 analizar una fecha, necesitamos crear una instancia de SimpleDateFormat
utilizando el constructor y luego usar el 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 imprimirá ” MM-dd-yyyy
“:
Output01-02-2018
Este patrón produce “mes en año”, “día en mes” y “año”. El tipo de carácter (y mayúsculas) y la cantidad de caracteres contribuyen a la cadena. El mes se representaría con dos dígitos, el día con dos dígitos y el año con cuatro dígitos.
Este código mostró la fecha “2 de enero de 2018″ como ” 01-02-2018
“.
Para analizar la hora, debemos cambiar el patrón al crear una instancia 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 imprimirá ” HH:mm:ss.SSSZ
“:
Output13:03:15.454+0530
Este patrón produce “horas”, “minutos”, “segundos”, “milisegundos” y “desplazamiento de la zona horaria en horas (patrón RFC)”.
Este código mostró la hora como ” 13:03:15.454+0530
“.
Usando parse()
El análisis es la conversión de una cadena en una instancia de java.util.Date
. Podemos analizar una cadena para obtener una instancia de fecha usando el método parse()
de la clase SimpleDateFormat. Para analizar una cadena a fecha, necesitamos una instancia de la clase SimpleDateFormat y un patrón de cadena como entrada para el constructor de la clase.
String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("12-01-2018");
System.out.println(date);
Esto producirá una fecha (12-01-2018
) sin una hora especificada:
OutputSat Dec 01 00:00:00 IST 2018
Ahora veamos un ejemplo de SimpleDateFormat
para analizar la hora.
String pattern = "HH:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("22:00:03");
System.out.println(date);
Esto producirá una hora (22:00:03
) sin una fecha especificada:
OutputThu Jan 01 22:00:03 IST 1970
Como no hemos especificado ninguna fecha, el programa consideró la época como la fecha (es decir, 01-ene-1970
).
Usando Locale
Hemos trabajado con Locale
como parte de DateFormat
y hemos visto que los locales se usan según las regiones.
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 formateará la hora actual en francés (fr
) y la región de Francia (FR
):
Outputmardi janvier 2018 14:51:02.354+0530
El día y el mes se nombran en francés según el Locale
proporcionado como entrada: mardi
es “martes” y janvier
es “enero”.
Conclusión
En este artículo, aprendiste sobre SimpleDateFormat
y DateFormat
de Java.
Referencia:
Source:
https://www.digitalocean.com/community/tutorials/java-simpledateformat-java-date-format