Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

    
            
  •              serie Java hasta la fecha de conversión                                      13 respuestas                          
  •     
    

Estoy tratando de analizar esta fecha con SimpleDateFormat y no está funcionando:

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

public class Formaterclass {
    public static void main(String[] args) throws ParseException{
        String strDate = "Thu Jun 18 20:56:02 EDT 2009";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        Date dateStr = formatter.parse(strDate);
        String formattedDate = formatter.format(dateStr);
        System.out.println("yyyy-MM-dd date is ==>"+formattedDate);
        Date date1 = formatter.parse(formattedDate);

        formatter = new SimpleDateFormat("dd-MMM-yyyy");
        formattedDate = formatter.format(date1);
        System.out.println("dd-MMM-yyyy date is ==>"+formattedDate);
    }
}

Si trato de este código con strDate = "2008-10-14", no tengo una respuesta positiva. ¿Cuál es el problema? ¿Cómo puedo analizar este formato?

PS. Tengo esta fecha de un jDatePicker y no hay ninguna instrucción sobre cómo modificar el formato de fecha que consigo cuando el usuario elige una fecha.

¿Fue útil?

Solución

No se puede esperar para analizar una cita con una SimpleDateFormat que está configurado con un formato diferente.

Para analizar su cadena de fecha "Jue Jun 18 de 2009 20:56:02 EDT" se necesita un SimpleDateFormat así (más o menos):

SimpleDateFormat parser=new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");

Utilice esta opción para analizar la cadena en una fecha y, a continuación, su otra SimpleDateFormat convertir esa fecha en el formato que desee.

        String input = "Thu Jun 18 20:56:02 EDT 2009";
        SimpleDateFormat parser = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");
        Date date = parser.parse(input);
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = formatter.format(date);

        ...

JavaDoc: http://docs.oracle. com / JavaSE / 7 / docs / api / java / texto / SimpleDateFormat.html

Otros consejos

El problema es que usted tiene una fecha con formato siguiente:

Thu Jun 18 20:56:02 EDT 2009

Pero está utilizando un SimpleDateFormat que es:

yyyy-MM-dd

Los dos formatos no están de acuerdo. Es necesario construir un SimpleDateFormat que coincide con el diseño de la cadena que está tratando de analizar en una fecha. Alineando las cosas para que sea fácil de ver, quieres un SimpleDateFormat como esto:

EEE MMM dd HH:mm:ss zzz yyyy
Thu Jun 18 20:56:02 EDT 2009

Consulte la página de JavaDoc he vinculado y ver cómo se utilizan los caracteres.

Ahora tenemos una manera más moderna para hacer este trabajo.

java.time

El marco java.time se incluye con Java 8 y versiones posteriores. Ver Tutorial . Estas nuevas clases se inspiran en Joda-Time , definido por JSR 310 , y se extendió por el ThreeTen-extra proyecto. Ellos son una gran mejora sobre las clases de edad problemáticos, java.util.Date/.Calendar et al.

Tenga en cuenta que los códigos de letras 3-4 como EDT no están normalizados ni único. Evitarlos siempre que sea posible. Aprender a usar ISO 8601 formatos estándares en su lugar. El marco java.time puede tomar una puñalada en la traducción, pero muchos de los códigos utilizados comúnmente tienen valores duplicados.

Por cierto, nótese cómo java.time por defecto genera cadenas utilizando la norma ISO 8601 formatos sino que se extendió añadiendo el nombre de la zona horaria entre paréntesis.

String input = "Thu Jun 18 20:56:02 EDT 2009";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "EEE MMM d HH:mm:ss zzz yyyy" , Locale.ENGLISH );
ZonedDateTime zdt = formatter.parse ( input , ZonedDateTime :: from );

Volcado a la consola.

System.out.println ( "zdt : " + zdt );

Cuando se ejecuta.

  

zdt: 2009-06-18T20: 56: 02-04: 00 [America / New_York]

Ajuste de la zona horaria

Para la diversión vamos a ajustar a la zona horaria de la India.

ZonedDateTime zdtKolkata = zdt.withZoneSameInstant ( ZoneId.of ( "Asia/Kolkata" ) );
  

zdtKolkata: 2009-06-19T06: 26: 02 + 05: 30 [Asia / Calcuta]

Convertir a j.u.Date

Si realmente necesita un objeto java.util.Date para su uso con las clases aún no actualizados a los tipos java.time, convertir. Tenga en cuenta que está perdiendo la zona horaria asignada, pero tiene el mismo instante ajusta automáticamente a UTC .

java.util.Date date = java.util.Date.from( zdt.toInstant() );

¿Qué hay de getSelectedDate ? De todos modos, específicamente en su pregunta código, el problema está en esta línea:

new SimpleDateFormat("yyyy-MM-dd");

La cadena que va en el constructor tiene que coincidir con el formato de la fecha. La documentación de la forma de hacerlo es href="http://java.sun.com/javase/6/docs/api/java/text/SimpleDateFormat.html" aquí . Parece que necesitas algo parecido a "EEE MMM d hh: mm: ss aaaa zzz"

En respuesta a: " Cómo convertir mar 13 2016 00:00:00 GMT-0500 (SEP Hora de verano central (México)) a DD-MM-AA en Java? ", que se caracterizó cómo duplicado

Prueba esto: Con java.util.Date, java.text.SimpleDateFormat, que es una solución simple.

public static void main(String[] args) throws ParseException {

    String fecha = "Tue Sep 13 2016 00:00:00 GMT-0500 (Hora de verano central (México))";
    Date f = new Date(fecha);

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    sdf.setTimeZone(TimeZone.getTimeZone("-5GMT"));
    fecha = sdf.format(f);
    System.out.println(fecha);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top