2011-06-30 14 views
18

En mi aplicación, tengo el requisito de formatear 12 horas de tiempo a 24 horas de tiempo. ¿Cuál es el método que tengo que usar?Conversión de 12 horas a 24 horas en java

Por ejemplo, hora como 10:30 AM. ¿Cómo puedo convertir a 24 horas en java?

+2

¿* solo * tiene una hora o también una fecha? –

+0

@JonSkeet: only time – Swift

Respuesta

55

Prueba esto:

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

public class Main { 
    public static void main(String [] args) throws Exception { 
     SimpleDateFormat displayFormat = new SimpleDateFormat("HH:mm"); 
     SimpleDateFormat parseFormat = new SimpleDateFormat("hh:mm a"); 
     Date date = parseFormat.parse("10:30 PM"); 
     System.out.println(parseFormat.format(date) + " = " + displayFormat.format(date)); 
    } 
} 

que produce:

10:30 PM = 22:30 

Ver: http://download.oracle.com/javase/1.5.0/docs/api/java/text/SimpleDateFormat.html

4

Suponiendo que usa SimpleDateFormat implícita o explícitamente, necesita usar H en lugar de h en la cadena de formato.

por ejemplo

HH:mm:ss

en lugar de

hh:mm:ss

2
SimpleDateFormat parseFormat = new SimpleDateFormat("hh:mm a"); 

respuesta proporcionada por Bart Kiers debe sustituirse por somethig como

SimpleDateFormat parseFormat = new SimpleDateFormat("hh:mm a",Locale.UK); 
0

intenta esto

public static String convertTo24Hour(String Time) { 
    DateFormat f1 = new SimpleDateFormat("hh:mm a"); //11:00 pm 
    Date d = null; 
    try { 
     d = f1.parse(Time); 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    DateFormat f2 = new SimpleDateFormat("HH:mm"); 
    String x = f2.format(d); // "23:00" 

    return x; 
} 
9

java.time

En Java 8 y versiones posteriores, se podría hacer en una línea utilizando la clase java.time.LocalTime. Código de ejemplo:

String result = LocalTime.parse(time, DateTimeFormatter.ofPattern("hh:mm a")).format(DateTimeFormatter.ofPattern("HH:mm")); 
0

que estaba buscando lo mismo, pero en número, significa desde un entero horas xx, xx minutos y AM/PM a 24 horas horas formato xx y xx minutos, así que aquí lo que he hecho:

private static final int AM = 0; 
private static final int PM = 1; 
/** 
    * Based on concept: day start from 00:00AM and ends at 11:59PM, 
    * afternoon 12 is 12PM, 12:xxAM is basically 00:xxAM 
    * @param hour12Format 
    * @param amPm 
    * @return 
    */ 
    private int get24FormatHour(int hour12Format,int amPm){ 
    if(hour12Format==12 && amPm==AM){ 
     hour12Format=0; 
    } 
    if(amPm == PM && hour12Format!=12){ 
     hour12Format+=12; 
    } 
    return hour12Format; 
    }` 

    private int minutesTillMidnight(int hour12Format,int minutes, int amPm){ 
     int hour24Format=get24FormatHour(hour12Format,amPm); 
     System.out.println("24 Format :"+hour24Format+":"+minutes); 
     return (hour24Format*60)+minutes; 
     } 
0

Usando LocalTime en Java 8, LocalTime tiene muchos métodos útiles como getHour() o el método getMinute(),

Por ejemplo,

LocalTime intime = LocalTime.parse(inputString, DateTimeFormatter.ofPattern("h:m a")); 
String outtime = intime.format(DateTimeFormatter.ISO_LOCAL_TIME); 

En algunos casos, la primera línea solo puede hacer el análisis requerido

+0

Duplicate Answer; ver [respuesta original de Cloud] (https://stackoverflow.com/a/37388524/642706). Y el código que se ve aquí falla, habiendo omitido un ESPACIO que se encuentra en los datos de la Pregunta. –

+0

LocalTime de forma predeterminada da el formato de 24 horas, por lo que la primera línea dará el formato requerido, no es necesario formatearlo de nuevo y no tengo permisos para comentar en la respuesta de la nube – venkata

Cuestiones relacionadas