Java getHours (), getMinutes () y getSeconds ()

81

Que yo sepa getHours(), getMinutes()y getSeconds()es Todos los desuso en Java y que se reemplacen por Calendar.HOUR_OF_DAY, Calendar.MINUTE, Calendar.SECOND.

De hecho, estos devolverán la hora, el minuto y el segundo para ese momento en particular. Sin embargo, me gustaría recuperar las horas y los minutos de una variable de fecha. Por ejemplo,

digamos que el tiempo recuperado de la base de datos es

time = Thu Jan 01 09:12:18 CET 1970;

int hours = time.getHours();
int minutes = time.getMinutes();
int seconds = time.getSeconds();

Al recuperar las horas, los minutos y los segundos, obtengo

hours = 9
minutes = 12
seconds = 18

Entonces, ¿cómo uso el Calendario para esta función? Aunque getHours()se ha desaprobado, pero aún funciona. Todavía me gustaría saber si hay una alternativa a esto.

mel
fuente

Respuestas:

179

Prueba esto:

Calendar calendar = Calendar.getInstance();
calendar.setTime(yourdate);
int hours = calendar.get(Calendar.HOUR_OF_DAY);
int minutes = calendar.get(Calendar.MINUTE);
int seconds = calendar.get(Calendar.SECOND);

Editar:

hours, minutes, seconds

¡arriba serán las horas, minutos y segundos después de convertir yourdatea System Timezone!

usuario998692
fuente
1
Además, si necesita establecer una zona horaria, agregue TimeZone tz = TimeZone.getTimeZone ("UTC"); // ... init calendar calendar.setTimeZone (tz); <code>
Swaraj
33

Java 8

    System.out.println(LocalDateTime.now().getHour());       // 7
    System.out.println(LocalDateTime.now().getMinute());     // 45
    System.out.println(LocalDateTime.now().getSecond());     // 32

Calendario

System.out.println(Calendar.getInstance().get(Calendar.HOUR_OF_DAY));  // 7 
System.out.println(Calendar.getInstance().get(Calendar.MINUTE));       // 45
System.out.println(Calendar.getInstance().get(Calendar.SECOND));       // 32

Hora de Joda

    System.out.println(new DateTime().getHourOfDay());      // 7
    System.out.println(new DateTime().getMinuteOfHour());   // 45
    System.out.println(new DateTime().getSecondOfMinute()); // 32

Formateado

Java 8

    // 07:48:55.056
    System.out.println(ZonedDateTime.now().format(DateTimeFormatter.ISO_LOCAL_TIME));
    // 7:48:55
    System.out.println(LocalTime.now().getHour() + ":" + LocalTime.now().getMinute() + ":" + LocalTime.now().getSecond());

    // 07:48:55
    System.out.println(new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()));

    // 074855
    System.out.println(new SimpleDateFormat("HHmmss").format(Calendar.getInstance().getTime()));

    // 07:48:55 
    System.out.println(new Date().toString().substring(11, 20));
blueberry0xff
fuente
V resumen útil: estos son probablemente los conjuntos de sistemas de fecha / hora más comunes en la actualidad.
StephenBoesch
1
Pero mostraba horas y minutos en un solo dígito. ¿Es posible mostrar dos dígitos
Phoenix
9

Para una diferencia horaria, tenga en cuenta que el calendario comienza el 01.01.1970, 01:00, no a las 00:00. Si está utilizando java.util.Date y java.text.SimpleDateFormat, tendrá que compensar 1 hora:

long start = System.currentTimeMillis();
long end = start + (1*3600 + 23*60 + 45) * 1000 + 678; // 1 h 23 min 45.678 s
Date timeDiff = new Date(end - start - 3600000); // compensate for 1h in millis
SimpleDateFormat timeFormat = new SimpleDateFormat("H:mm:ss.SSS");
System.out.println("Duration: " + timeFormat.format(timeDiff));

Esto imprimirá:

Duración: 1: 23: 45.678

usuario2003461
fuente
2
Guau. simplemente cómo imposible la manipulación fecha se pueden hacer en Java.
StephenBoesch