Java Calendario de la Hora del Día en que Regresan Formato de 12 Horas

De Java, docs, Calendar.HOUR se supone que devuelve la hora en el formato de 12 horas, y Calendar.HOUR_OF_DAY se supone que devuelve la hora en el formato de 24 horas, pero ambos están regresando en el formato de 12 horas.

Mi Código:

Calendar rightNow = Calendar.getInstance();
int hour = rightNow.get(Calendar.HOUR_OF_DAY);
System.out.println("hour: " + hour);

Hay una pregunta que es similar a la mía ya, pero no es para un momento específico y estoy tratando de hacer esto con la hora actual. La pregunta es aquí java HORA y HOUR_OF_DAY tanto de regresar de 12 horas


EDICIÓN:

Si importa, esto está sucediendo dentro de Eclipse en Windows, dentro de cmd.exe en Windows, y la Terminal en Ubuntu.


EDITAR 2

Ahora me siento tonta… no me di cuenta de que tenía varias instancias de llamar a la hora actual, y estaba buscando en el lugar equivocado, que era HOUR_OF_DAY, pero el que yo estaba viendo en la consola estaban siendo publicado por sólo una HORA… Gracias por la ayuda en los comentarios y la edición de mi propio post que me llevó a darme cuenta de mi error

  • ¿Qué hora es para usted? ¿Qué valor es el que regresa?
  • Son las 9 PM, o 21, y volviendo 9 con tanto HORA y HOUR_OF_DAY
  • El código no compila. He hecho el cambio a la siguiente: Calendar rightNow = Calendar.getInstance(); int hour = rightNow.get(Calendar.HOUR_OF_DAY); es de 10 horas y funciona bien y devuelve 22.
  • ¿Qué quieres decir con que no compila? Compila bien en la mía, pero que muy extraño que yo no puedo conseguir la mina a trabajar…
  • Calendar.rightNow tiene un . en lugar de un espacio.
  • Agregar int amPm = rightNow.get(Calendar.AM_PM); y System.out.println("amPm: " + amPm);. Estoy segura de que se imprime cero.

6 Kommentare

  1. 11

    Cuando el ajuste de la hora, es importante utilizar HOUR_OF_DAY y notación de 24 horas, o el uso HOUR y suministro de la AM_PM campo…

    Calendar c = Calendar.getInstance();
    c.set(Calendar.HOUR_OF_DAY, 17);
    System.out.println(c.get(Calendar.HOUR_OF_DAY));
    System.out.println(c.get(Calendar.HOUR));
    System.out.println(c.get(Calendar.AM_PM));
    
    c.set(Calendar.HOUR_OF_DAY, 5);
    System.out.println(c.get(Calendar.HOUR_OF_DAY));
    System.out.println(c.get(Calendar.HOUR));
    System.out.println(c.get(Calendar.AM_PM));

    Va a imprimir…

    17
    5
    1 //PM
    5
    5
    0 //AM

    Cuando yo uso

    c.set(Calendar.HOUR, 17);
    System.out.println(c.get(Calendar.HOUR_OF_DAY));
    System.out.println(c.get(Calendar.HOUR));
    System.out.println(c.get(Calendar.AM_PM));

    Yo…

    5
    5
    0 //AM

    Lo que significa que la API se ha filtrado el resultado e hizo una corrección interna. Es MUY importante usar el campo de la derecha de la derecha el valor, como la Calendar puede rodar valores como considere oportuno…

    Si puedo añadir c.setLenient(false);, lanzará una java.lang.IllegalArgumentException: HOUR porque 17 no es un valor válido para HOUR

    • Entonces, ¿cómo puedo modificar mi código actual tiene HOUR_OF_DAY devolver correctamente para la hora actual del día?
    • Eso depende, si usted está usando un valor de hora +12, va a trabajar. Si usted está usando valores de entre 1 a 12, entonces usted necesita para establecer el AM_PM valor en consecuencia…Si te dicen que la «hora es de 5» ¿qué significa esto? El Calendar tiene sólo un primitivo concepto de lo que realmente significa…
    • En el código actual, también me gustaría inspeccionar el AM_PM bandera y ver lo que el valor de es…
    • Yo tengo trabajo… era todo un problema diferente, pero gracias por la ayuda, su respuesta hizo que finalmente me lleva a mi conclusión
    • Bueno, porque yo estaba confundido 😛
  2. 14

    intente esta prueba

        Calendar c = Calendar.getInstance();
        c.set(Calendar.HOUR, 17);
        System.out.println(c.get(Calendar.HOUR_OF_DAY));
        System.out.println(c.get(Calendar.HOUR));

    imprime

    17
    5
    • Más extraño aún… Mina vuelve 5 5
    • Si me puse c.set(Calendar.HORA, 5); imprime 5 5
    • Si se establece que en la mía me pongo 17 5
    • Calendar.HOUR, 17 parece ser corregidas automáticamente a 5 en mis pruebas…
  3. 2

    si se ejecuta el código en el lado del servidor, a continuación, detener el servidor y, a continuación, elimine proyecto de servidor y el servidor limpio después de que su problema resuelto.

    pero si no, a continuación, crear una clase de Prueba:

    public class Test {
    
    public static void main(String[] args) {
        Calendar calender = Calendar.getInstance();
    
        System.out.println(calender.getTimeInMillis());
    
        calender.set(Calendar.HOUR, 2);
    
        System.out.println(calender.getTimeInMillis());
    
        System.out.println(calender.get(Calendar.HOUR_OF_DAY));
    
    System.out.println(calender.get(Calendar.HOUR_OF_DAY));
        System.out.println(calender.get(Calendar.HOUR));
            Calendar calender1 = Calendar.getInstance();
            System.out.println(calender1.getTimeInMillis());
            calender1.setTimeInMillis(calender.getTimeInMillis());
    
        System.out.println(calender1.getTimeInMillis());
    
        System.out.println(calender1.getTimeInMillis());
    
    }}

    a continuación, haga clic derecho en la clase de eclipse y ejecutar como aplicación java. entonces funciona

  4. 1

    Traté de su origen.

    Se puede conseguir el resultado adecuado.

    • eso es porque ahora se ha actualizado a la respuesta correcta
  5. 1

    tl;dr

    Instant.now()
           .atZone( ZoneId.of( "America/New_York" ) )
           .getHour()

    Usando java.tiempo

    Está utilizando problemático legado de fecha y hora de las clases de ahora suplantado por el de java.clases de tiempo.

    Instant

    La Instant clase representa un momento en la línea de tiempo en UTC con una resolución de nanosegundos.

    Conseguir actual momento:

    Instant instant = Instant.now();

    instante.toString(): 2016-09-16T20:46:01.123456789 Z

    ZonedDateTime

    De la zona horaria es crucial en la determinación de la fecha y de la hora del día. Para un momento dado, la fecha y la hora del día varían en todo el mundo por la zona.

    Aplicar una zona de tiempo para ver algunos de la región hora del reloj de pared.

    ZoneId z = ZoneId.of( "America/Montreal" );
    ZonedDateTime zdt = instant.atZone( z );

    zdt.toString() 2016-09-16T16:46:01.123456789-04:00[America/Montreal]

    Interrogar por la hora del día como un número de 0 a 23.

    int hourOfDay = zdt.gotHour();

    16

    Acerca de java.tiempo

    La java.tiempo marco está construido en Java 8 y versiones posteriores. Estas clases suplantar la problemática de edad de fecha y hora de las clases, tales como java.util.Date, .Calendar, & java.text.SimpleDateFormat.

    La Joda-El Tiempo proyecto, ahora en el modo de mantenimiento, asesora de 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 se adapta a Android en ThreeTenABP (ver Cómo utilizar…).

    La ThreeTen-Extra proyecto se extiende java.tiempo con clases adicionales. Este proyecto es un terreno de prueba para posibles futuras incorporaciones a java.tiempo. Usted puede encontrar algunos de clases útiles aquí como Interval, YearWeek, YearQuarter, y más.

  6. 0

    La comprobación de todas las áreas de mi código que hace referencia el Calendario objeto de intentar conseguir el horario era el problema. Hice esto en tres lugares diferentes, pero sólo se modifica uno de los tres, que es la razón por la que mis cambios no parecen tener efecto

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea