2011-09-28 12 views
27

Quiero obtener el formato de una cadena de fecha determinada.¿Cómo obtener el formato de cadena de fecha (patrón) en java?

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 encontrar a cabo este formato de fecha cuando paso de cadena (2011-09-27T07:04:21.97-05:00) a un método que devolverá el formato (yyyy-MM-dd'T'HH:mm:ss.SSS), y más tarde voy a formatear mi cadena de fecha determinada de acuerdo a mi requerimiento (like yy-mm--dd or mm/dd/yyyy).

¿Alguien me puede decir cómo puedo conseguirlo?

+0

@Tomasz Nurkiewicz, no, no lo es. Es una pregunta de conversión de fecha de un formato a otro. –

+7

No entiendo cómo esta pregunta de Java es un duplicado de una pregunta de Javascript (muy general) –

+0

lol..i perdí mi tiempo desplazándome en javascript respuesta de esta pregunta ... no uso ... no es una pregunta duplicada..porase untag duplicity –

Respuesta

31
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) { 

       } 
      } 
     } 
    } 
} 
+0

La solución anterior analizará la fecha con seguridad, pero no dará formato de fecha. SimpleDateFormat's toPattern & toLocalizedPattern dará el formato exacto. –

+0

Si alguien está utilizando esta solución, simplemente devuelva la cadena de análisis después de imprimir el valor – Narasimha

0

Deberá 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.

3

Creo que debería intentar analizar cadena 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.

6

usted puede hacer como esta manera, no sé buena forma o no, pero probar este

primero crear el objeto SimpleDateFormat

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

ahora que comprobar la fecha si esto va a analizar en este a continuación, cambiar el formato como por 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 
} 

posterior actualización:

Returning a date format from an unknown format of date string in java

How to convert String to Date without knowing the format?

Parse any date in Java

+0

¿cómo puedo especificar el formato a SimpleDateFormat sin conocer el formato de cadena dado? – sathish

+0

compruebe la publicación actualizada – Pratik

+0

¿cómo puedo especificar el formato para SimpleDateFormat como "aaaa-mm-dd 'T' HH: mm: ss.SSS" sin conocer el formato de cadena dado? si mi cadena es como 2011-09-28 12:00:22 entonces ¿cómo debo analizar esto con el objeto SimpleDateFormat anterior? – sathish

2

Si he entendido bien, que desea analizar cadenas arbitrarias (es decir, cadena de un formato que no sabe) como fechas utilizando DateFormat.parse()? Entonces usted tiene que hacer frente a cuestiones como la forma de manejar 01-02-03 (2 Ene 2003? 1 Feb 2003? Etc.)

Usted debe saber al menos algo sobre el formato esperado, como una opción de varios formatos predefinidos para su entrada.

0
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,}) 
+1

¿Cuál es su pregunta? – cereallarceny

2

código de Madhu es entrenamiento puede, pero algunos problemas de funcionamiento que se levantarán porque cada caso el fracaso elevará la excepción. Creo que necesitamos encontrar la solución de expresión de regulador para encontrar el patrón de la fecha dada Cadena.

se encuentran todas la mayoría de todas las expresiones reg a formato de hora y fecha en el siguiente enlace

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

Cuestiones relacionadas