¿Cuáles son los formatos de fecha disponibles en la clase SimpleDateFormat?

83

¿Alguien puede informarme sobre los formatos de fecha disponibles en la clase SimpleDateFormat?

Pasé por API pero no pude encontrar una respuesta satisfactoria. Cualquier ayuda es muy apreciada.

Abhishek_Mishra
fuente
3
¿Qué formato buscas? Tienes que crear un formato compuesto por los elementos que necesitas.
David Grant
3
Puede construir cualquier formato que permita la API. No hay una lista definitiva.
Peter Lawrey

Respuestas:

138

Los formatos de fecha y hora se describen a continuación

SimpleDateFormat (Java Platform SE 7) - Patrones de fecha y hora

Podría haber nvarios formatos que posiblemente pueda hacer. ex - dd/MM/yyyyo YYYY-'W'ww-upuede mezclar y combinar las letras para lograr el patrón requerido. Las letras del patrón son las siguientes.

  • G - Designador de era (AD)
  • y - Año (1996; 96)
  • Y - Semana Año (2009; 09)
  • M - Mes del año (julio; julio; 07)
  • w - Semana del año (27)
  • W - Semana en mes (2)
  • D - Día del año (189)
  • d - Día del mes (10)
  • F - Día de la semana en el mes (2)
  • E - Nombre del día en la semana (martes; martes)
  • u - Número de día de la semana (1 = lunes, ..., 7 = domingo)
  • a - Marcador AM / PM
  • H - Hora del día (0-23)
  • k - Hora del día (1-24)
  • K - Hora en am / pm (0-11)
  • h - Hora en am / pm (1-12)
  • m - Minuto en hora (30)
  • s - Segundo en minuto (55)
  • S - Milisegundo (978)
  • z - Zona horaria general (hora estándar del Pacífico; PST; GMT-08: 00)
  • Z - Zona horaria RFC 822 (-0800)
  • X - Zona horaria ISO 8601 (-08; -0800; -08: 00)

Analizar:

2000-01-23T04: 56: 07.000 + 0000

Utilizar: new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

Subhrajyoti Majumder
fuente
Gracias Quoi ... Pero, ¿podría decirme cómo puedo convertir las fechas en diferentes estándares como EST, IST, gdt, gmt, etc.?
Abhishek_Mishra
1
Entonces estás buscando una fecha en otra localidad. SimpleDateFormatpermitir establecer la configuración regional en el constructor. SimpleDateFormat formatter = new SimpleDateFormat(pattern, locale);
Subhrajyoti Majumder
Aceptar eso es algo que yo estaba buscando for..Thanks Quoi .. :)
Abhishek_Mishra
Aprecio tu franqueza. :)
Subhrajyoti Majumder
No confunda Z y 'Z'. Fui tonto y espero que nadie más sea como yo.
Tiefan Ju
52

Permítanme arrojar un código de ejemplo que obtuve de http://www3.ntu.edu.sg/home/ehchua/programming/java/DateTimeCalendar.html Luego, puede jugar con diferentes opciones hasta que lo entienda.

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTest {
   public static void main(String[] args) {
       Date now = new Date();

       //This is just Date's toString method and doesn't involve SimpleDateFormat
       System.out.println("toString(): " + now);  // dow mon dd hh:mm:ss zzz yyyy
       //Shows  "Mon Oct 08 08:17:06 EDT 2012"

       SimpleDateFormat dateFormatter = new SimpleDateFormat("E, y-M-d 'at' h:m:s a z");
       System.out.println("Format 1:   " + dateFormatter.format(now));
       // Shows  "Mon, 2012-10-8 at 8:17:6 AM EDT"

       dateFormatter = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
       System.out.println("Format 2:   " + dateFormatter.format(now));
       // Shows  "Mon 2012.10.08 at 08:17:06 AM EDT"

       dateFormatter = new SimpleDateFormat("EEEE, MMMM d, yyyy");
       System.out.println("Format 3:   " + dateFormatter.format(now));
       // Shows  "Monday, October 8, 2012"

       // SimpleDateFormat can be used to control the date/time display format:
       //   E (day of week): 3E or fewer (in text xxx), >3E (in full text)
       //   M (month): M (in number), MM (in number with leading zero)
       //              3M: (in text xxx), >3M: (in full text full)
       //   h (hour): h, hh (with leading zero)
       //   m (minute)
       //   s (second)
       //   a (AM/PM)
       //   H (hour in 0 to 23)
       //   z (time zone)
       //  (there may be more listed under the API - I didn't check)

   }

}

¡Buena suerte!

Roy
fuente
6

java.time

ACTUALIZAR

Las otras preguntas están pasadas de moda. Las terribles clases heredadas, como SimpleDateFormatfueron suplantadas hace años por las clases modernas de java.time .

Personalizado

Para definir sus propios patrones de formato personalizados, los códigos en DateTimeFormatterson similares pero no exactamente iguales a los códigos en SimpleDateFormat. Asegúrese de estudiar la documentación. Y busque Stack Overflow para muchos ejemplos.

DateTimeFormatter f = 
    DateTimeFormatter.ofPattern( 
        "dd MMM uuuu" , 
        Locale.ITALY 
    ) 
;

Estándar ISO 8601

El estándar ISO 8601 define formatos para muchos tipos de valores de fecha y hora. Estos formatos están diseñados para el intercambio de datos, pueden ser analizados fácilmente por una máquina y leídos fácilmente por humanos en diferentes culturas.

Las clases java.time utilizan formatos ISO 8601 de forma predeterminada al generar / analizar cadenas. Simplemente llame a los métodos toString& parse. No es necesario especificar un patrón de formato.

Instant.now().toString()

2018-11-05T18: 19: 33.017554Z

Para un valor en UTC, al Zfinal significa UTC y se pronuncia "Zulu".

Localizar

En lugar de especificar un patrón de formato, puede dejar que java.time se localice automáticamente. Usa los DateTimeFormatter.ofLocalized…métodos.

Obtenga el momento actual con la hora del reloj de pared que usa la gente de una región en particular (una zona horaria).

ZoneId z = ZoneId.of( "Africa/Tunis" );
ZonedDateTime zdt = ZonedDateTime.now( z );

Genere texto en formato estándar ISO 8601 sabiamente extendido para agregar el nombre de la zona horaria entre corchetes.

zdt.toString (): 2018-11-05T19: 20: 23.765293 + 01: 00 [África / Túnez]

Genere texto localizado automáticamente.

Locale locale = Locale.CANADA_FRENCH;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ).withLocale( locale );

String output = zdt.format( f );

salida: lundi 5 de noviembre de 2018 à 19:20:23 heure normale d'Europe centrale

En general, es una mejor práctica localizar automáticamente en lugar de preocuparse por los patrones de formato codificados.


Acerca de java.time

El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases suplantar la vieja problemáticos heredados clases de fecha y hora como java.util.Date, Calendar, y SimpleDateFormat.

Para obtener más información, consulte el tutorial de Oracle . Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .

El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .

Puede intercambiar objetos java.time directamente con su base de datos. Utilice un controlador JDBC compatible con JDBC 4.2 o posterior. No se necesitan cuerdas, no se necesitan java.sql.*clases. Hibernate 5 y JPA 2.2 admiten java.time .

¿Dónde obtener las clases java.time?

Albahaca Bourque
fuente
5

verifique los formatos aquí http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

principal

System.out.println("date  : " + new classname().getMyDate("2014-01-09 14:06", "dd-MMM-yyyy E hh:mm a z", "yyyy-MM-dd HH:mm"));

método

 public String getMyDate(String myDate, String returnFormat, String myFormat)
            {
                DateFormat dateFormat = new SimpleDateFormat(returnFormat);
                Date date=null;
                String returnValue="";
                try {
                    date = new SimpleDateFormat(myFormat, Locale.ENGLISH).parse(myDate);
                    returnValue = dateFormat.format(date);
                } catch (ParseException e) {
                    returnValue= myDate;
                    System.out.println("failed");
                    e.printStackTrace();
                }

            return returnValue;
            }
rinuthomaz
fuente