Estoy tratando de analizar una cadena a un formato yyyy-MM-dd y uno a yyyy-MM-dd HH:mm:ss.
Estoy usando SimpleDateFormat.

He utilizado el mismo método con éxito antes, pero ahora algo va mal. Puedo obtener la fecha en el formato estándar es decir, Tue Mar 05 00:00:00 GMT+05:30 2012 (para yyyy-MM-dd) y Mon Mar 05 13:01:35 GMT+05:30 2012 (para yyyy-MM-dd HH:mm:ss) donde, ya que los necesitan para ser 2012-03-05 y 2012-03-05 13:01:35 respectivamente.

Esto es lo que yo hago :

Date today = new Date();
SimpleDateFormat tsdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
    today = tsdf.parse(tsdf.format(new Date()));
} catch(Exception e) {
    System.out.println("Error occurred"+ e.getMessage());
}

System.out.println(today);

Y

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
    //I recieve a string in this format here (refers to 5 march 2012).
    myDate = sdf.parse('2012-03-05');            
    System.out.println(myDate);
} catch(Exception e) {
    System.out.println("Error occurred "+ e.getMessage());
}
  • ¿Cuál es el error que estás recibiendo? Hay un stacktrace? O ¿en qué formato se consigue de la fecha en?
  • ‘2012-03-05″ debe ser «2012-03-05»
  • Por favor, muestre la excepción stacktrace(generada por e.printStackTrace())
  • El segundo ejemplo es un error de tiempo de compilación – debería leer sdf.parse("2012-03-05")
  • No hay ningún error. Nada más que una fecha en el formato incorrecto.
  • '' es un carácter literal, "" encierra un literal de cadena
  • Sí, pero la verdad es que conseguir un objeto string aquí, acabo de escribir la fecha como un ejemplo aquí.(Eso es un error tipográfico).

InformationsquelleAutor kanishk | 2012-03-05

4 Comentarios

  1. 2
    today = tsdf.parse(tsdf.format(new Date()));
    System.out.println(today);

    A mí me parece que se puede esperar, que la Date instancia se formato. Que no es el caso. Un Date instancia representa una fecha que puede ser formato «a» una cadena. Es una clase que simplemente tiene un long valor (que significa algo así como «el tiempo en milisegundos»).

    Esto daría el resultado esperado:

    Date today = new Date();
    String formattedDate = tsdf.format(today);
    System.println(formattedDate);     //<- we print the string!!
    • Tienes razón, pensé que el objeto date es el formato. En realidad no necesito imprimir la fecha, quiero insertar un registro que contenga esta fecha en la base de datos. Estoy recibiendo el error de la inserción de eso.
    • Qué tipo de error? Tenga cuidado de usar la clase correcta: es posible que desee java.sql.Date en lugar de java.util.Date.
  2. 3

    Usted no está recibiendo la cadena que es el resultado del formateador, usted está recibiendo la fecha real del objeto. Que siempre va a ser el resultado de la Fecha.toString(), que para el JDK que estás usando el formato que ver. No gire el formato de Cadena en un objeto date, simplemente imprimirlo!

    SimpleDateFormat tsdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    try {
        String formattedDate = tsdf.format(new Date());
    } catch(Exception e) {
        System.out.println("Error occurred"+ e.getMessage());
    }
    
    System.out.println(formattedDate);

    No se puede aplicar un «formato» para un java.util.Date objeto para su uso posterior. Es sólo un raw número de milisegundos y su método toString se imprimirá siempre la misma representación. Usted tiene que convertir en una cadena con formato y el uso de esa cadena.

    • Tienes razón Afectadas!
    • Existe una necesidad de try-catch tsdf.formato(new Date())? Entiendo try-catch es necesario para tsdf.parse(String fecha), pero no estoy convencido de que se necesita para tsdf.(formato de Fecha).
  3. 0

    Si desea dar formato a una Date ejemplo, usted no debe usar parse método, usted tiene que utilizar format método como el siguiente:

        Date today = new Date();
        SimpleDateFormat tsdf = new SimpleDateFormat("yyyy-MM-dd");
        try
        {
            System.out.println(tsdf.format(today));
        }
        catch (Exception e)
        {
            System.out.println("Error occurred" + e.getMessage());
        }

    parse en el uso del método para convertir una cadena a la fecha y format método para formatear una Date instancia a la cadena de formato especificado.

  4. 0

    java.tiempo

    Usted está usando la vieja problemática de la fecha-hora de clases ahora suplantado por el de java.clases de tiempo.

    La java.tiempo marco está construido en Java 8 y versiones posteriores. Estas clases de sustituir la vieja problemática de fecha y hora de las clases, tales como java.util.Date, .Calendar, & java.text.SimpleDateFormat. El Joda-El Tiempo equipo también asesora a la migración a java.tiempo.

    Para obtener más información, consulte la Oracle Tutorial. Y la búsqueda de Desbordamiento de Pila, hay muchos ejemplos y explicaciones.

    Mucho de java.el tiempo es la funcionalidad de back-portado a Java 6 & 7 en ThreeTen-Backport y adaptado a Android en ThreeTenABP.

    LocalDate

    Para la fecha-sólo los valores, el uso de la LocalDate clase. Su valor de entrada es estándar en formato ISO 8601. La ISO 8601 se utilizan los formatos por defecto en java.clases de tiempo para el análisis y la generación de cadenas que representan los valores de tiempo. Así que no hay necesidad de especificar un formato de patrón.

    LocalDate localDate = LocalDate.parse( "2012-03-05" );

    Para generar una cadena, llamada toString.

    String output = localDate.toString();

    LocalDateTime

    Para una cadena como 2012-03-05 12:34:56 tenemos un problema. Sin desplazamiento de UTC o tiempo de la zona indicada. Por lo que no representan un momento real en la línea de tiempo, sino más bien una idea aproximada acerca de los posibles momentos. Esta falta de momento está representado en java.tiempo por el LocalDateTime clase.

    Su cadena de formato es una variación en la norma ISO 8601, mientras que la versión canónica tiene un T en el medio en lugar de un espacio. Así que una opción es sustituir el ESPACIO con un T.

    LocalDateTime ldt = LocalDateTime.parse( "2012-03-05 12:34:56".replace( " " , "T" );

    O definir un patrón.

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyy-MM-dd hh:mm:ss" );
    LocalDateTime ldt = LocalDateTime.parse( "2012-03-05 12:34:56" , formatter );

    Evitar el uso de tales formatos de fecha y hora que carecen en offset o la zona horaria info si es que se quiere representar real de momentos en la línea de tiempo.

    ZonedDateTime

    Para dar ese valor significado, para determinar el momento actual, en la línea de tiempo, tenemos que asignar el tiempo de la zona para que la fecha y hora en que se pretende.

    ZoneId zoneId = ZoneId.of( "America/Montreal" );
    ZonedDateTime zdt = ldt.atZone( zoneId );

    Llamar toString genera una Cadena de texto en un formato que se extiende el estándar ISO 8601 formato anexando el nombre de la zona horaria en corchetes.

    String output = zdt.toString(); //Yields: 2012-03-05T12:34:56-04:00[America/Montreal]

    Si desea omitir la T puede sustituir con un ESPACIO utilizando String::replace método. O el uso de un formateador. Si usted realmente desea una cadena como se ve en la Pregunta que carecen de cualquier desplazamiento o la zona horaria info (en contra de mi recomendación) utilizan el mismo formateador se muestra arriba.

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyy-MM-dd hh:mm:ss" );  //Not recommended as it lacks offset/zone info.
    String output = zdt.format( formatter );  //Yields: 2012-03-05 12:34:56

Dejar respuesta

Please enter your comment!
Please enter your name here