Pregunta ¿Cómo obtener el formato de cadena de fecha (patrón) en java?


Quiero obtener el formato de una cadena de fecha determinada.

Ejemplo: tengo una cadena como 2011-09-27T07:04:21.97-05:00 y el formato de fecha de esta cadena es yyyy-MM-dd'T'HH:mm:ss.SSS.

Aquí quiero descubrir este formato de fecha cuando paso una cuerda (2011-09-27T07:04:21.97-05:00) a un método que devolverá el formato (yyyy-MM-dd'T'HH:mm:ss.SSS), luego formatearé mi cadena de fecha dada de acuerdo con mis requisitos (like yy-mm--dd or mm/dd/yyyy)

¿Alguien puede decirme cómo puedo lograrlo?


32
2017-09-28 06:38


origen


Respuestas:


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class NewClass {

    private static final String[] formats = { 
                "yyyy-MM-dd'T'HH:mm:ss'Z'",   "yyyy-MM-dd'T'HH:mm:ssZ",
                "yyyy-MM-dd'T'HH:mm:ss",      "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
                "yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd HH:mm:ss", 
                "MM/dd/yyyy HH:mm:ss",        "MM/dd/yyyy'T'HH:mm:ss.SSS'Z'", 
                "MM/dd/yyyy'T'HH:mm:ss.SSSZ", "MM/dd/yyyy'T'HH:mm:ss.SSS", 
                "MM/dd/yyyy'T'HH:mm:ssZ",     "MM/dd/yyyy'T'HH:mm:ss", 
                "yyyy:MM:dd HH:mm:ss",        "yyyyMMdd", };

        /*
         * @param args
         */
    public static void main(String[] args) {
        String yyyyMMdd = "20110917";   
        parse(yyyyMMdd);
    }

    public static void parse(String d) {
        if (d != null) {
            for (String parse : formats) {
                SimpleDateFormat sdf = new SimpleDateFormat(parse);
                try {
                    sdf.parse(d);
                    System.out.println("Printing the value of " + parse);
                } catch (ParseException e) {

                }
            }
        }
    }
}

36
2017-10-11 23:16



puedes hacer de esta manera, no sé bien o no, pero intenta esto

primero crea el objeto SimpleDateFormat

SimpleDateFormt sdf = new SimpleDateFormat("yyyy-MM-dd 'T' HH:mm:ss.SSS");

ahora cuando verifique la fecha si esto se analizará en este formato, cambie según su formato

try{
     Date date = sdf.parse(yourdate);
     sdf.applyPattern("yy-mm--dd or mm/dd/yyyy");
     String dateformat = sdf.format(date);
}catch(Exception ex) { // here forgot the exact exception class Parse exception was used
    // do something here
}

publicación actualizada:

Devolver un formato de fecha de un formato desconocido de cadena de fecha en Java

¿Cómo convertir String a Date sin conocer el formato?

Analizar cualquier fecha en Java


6
2017-09-28 06:49



Creo que debería intentar analizar cadenas de entrada con algunos patrones predefinidos. El que funciona es el que necesitas. Recuerda que algunos patrones son bastante complicados.

01.12.12 es 01 de diciembre de 2012 en Europa, pero el 12 de enero de 2012 en EE. UU. Podría ser el 12 de diciembre de 2001 también.


3
2017-09-28 06:44



Si te entiendo correctamente, quieres analizar arbitrario cadenas (es decir, cadena de un formato que no conoce) como fechas mediante el uso de DateFormat.parse()? Entonces tienes que lidiar con problemas como la forma de manejar 01-02-03 (2 de enero de 2003? 1 de febrero de 2003? Etc.)

Debes saber al menos alguna cosa sobre el formato esperado, como una selección de varios formatos predefinidos para su entrada.


2
2017-09-28 06:52



El código de Madhu puede funcionar, pero surgirá algún problema de rendimiento porque cada caso de falla elevará la excepción. Creo que tenemos que encontrar la solución de expresión del regulador para encontrar el patrón de la fecha dada String.

puedes encontrar todas las expresiones más de reg para el formato de fecha y hora en el siguiente enlace

http://regexlib.com/DisplayPatterns.aspx?cattabindex=4&categoryId=5&AspxAutoDetectCookieSupport=1


2
2017-11-12 12:33



Tendrá que tomar la cadena de fecha inicial y encubrirla a un objeto de fecha, pasar ese objeto de fecha convertido y formatearlo en la cadena requerida.


0
2017-09-28 06:44



HH:mm:ss.SSS => ([0-2]{1,}[0-9]{1,})(:)([0-5]{1,}[0-9]{1,})(:)([0-5]{1,}[0-9]{1,})(.)([0-9]{1,3})

yyyy-mm-dd => ([0-9]{4})(-)([0-1]{1,}[0-9]{1,})(-)([0-3]{1,}[0-9]{1,})

-3
2017-10-12 17:20