style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Problema con SimpleDateFormat con formato 00:00:00 a.m.

Estimados,

Tengo un problema que no logro solucionar. les cuento, tengo un archivo en Excel del cual leo una celda con la siguiente información (no puedo cambiarla).
29/10/2015 03:37:47 p.m.
logro separar la fecha de la hora con el siguiente codigo.

 public static String getTime(Date date){
                        SimpleDateFormat sdf = new SimpleDateFormat("HHmmss", new Locale("es", "MX"));
                String hora = sdf.format(date);
                return hora;
        }

El problema que tengo es que no me reconoce el formato el 03:37:47 p.m., tanto si dice a.m. o p.m, en ambos me da resultado 033747, cuando si dice 03:37:47 p.m me debería poner 153747.

Muchas gracias de antemano por su ayuda.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de julgo

formato sin puntos

prueba revisando el Date que recibe tu metodo si tiene el formato am/pm
esto imprime lo que quieres sin los puntos en p.m. ¿el Date acepta el formato con puntos a.m/p.m?

Date date=new Date("29/10/2015 03:37:47 pm");
                        SimpleDateFormat sdf = new SimpleDateFormat("HHmmss" , new Locale("es", "MX"));
                String hora = sdf.format(date);
               System.out.println(hora); //imprime ->  153747
Imagen de francisco.santiagoj

No hay problema sin los puntos

Gracias @julgo por tu respuesta.

Si no hay puntos en a.m / p.m todo funciona a la perfección, el problema son los puntos; pero como comentaba los valores a leer tienen los puntos y no puedo quitárselos, el programa que crea el excel únicamente tienen esa configuración.

Saludos,

Re: formato 00:00:00 a.m.

 

Sospecho que lo siguiente puede ser de utilidad:

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

public class Main {
    public static void main(String[] args) throws ParseException {
        DateFormatSymbols dfs = new DateFormatSymbols();
        dfs.setAmPmStrings(new String[] { "a.m.", "p.m." });
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a", dfs);
        Date date = sdf.parse("29/10/2015 03:37:47 p.m.");
        System.out.println(date); // Thu Oct 29 15:37:47 CST 2015
    }
}

Debe tenerse en cuenta que:

  • H se utiliza para horas del día (de 0 a 23)
  • h se utiliza para horas del día en AM/PM (de 1 a 12)

¡Por si sirve de algo!

~~~

Imagen de francisco.santiagoj

Gracias @jpaul

Claro que me sirvió!!!, había optado por crear un nuevo String quitando a.m. / p.m. y después crear un nuevo String con AM / PM según fuera el caso todo con ayuda de un if.

Pero DateFormatSymbols es lo que estaba buscando.

Muchas gracias!

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">