Estás en: Inicio >> Foros >> Informática >> Programación
Programación /

[JAVA] Primeros pasos en java (duda)

Participa en el tema [JAVA] Primeros pasos en java (duda) en el foro Programación.
Hola, estoy dando mis primeros pasos en Java y me puse a hacer un simple ...

Buscar en este tema:
 
  •  
    #1 [JAVA] Primeros pasos en java (duda)
    Hola, estoy dando mis primeros pasos en Java y me puse a hacer un simple reloj.

    Utilicé la clase "Calendar" para que me devuleva las horas, minutos y segundos.

    Pero cuando horas minutos o segundos son menores que diez no me rellena con ceros.

    Hice un pequeño ejemplito que arma un string fecha rellenando los ceros:

    Código:
    public void actualizarHora () {
    //consulta la hora en Calendar
    //y la pasa al string fecha    
        
    fecha="";    
    now = Calendar.getInstance();
    h = now.get(Calendar.HOUR);
    m = now.get(Calendar.MINUTE);
    s = now.get(Calendar.SECOND);
    
    //como Calendar no rellena con ceros si h,m o s es menor que diez
    //aca me encargo de eso
    if (h < 10)
        this.fecha += "0";
    this.fecha += h +":"; 
    
    if (m < 10)
        this.fecha += "0";
    this.fecha += m +":";
    
    if (s < 10)
        this.fecha += "0";
    this.fecha += s;
    
    
    
    }
    
    Mi duda es si este paso de armar la fecha agregando ceros se puede evitar con algún método de la clase Calendar o alguna otra clase (Date, Dateformat).

    Muchas Gracias.
    +
     
    0
    Me gusta
     
    | Más
  • #2 Re: Primeros pasos en java (duda)

    Originalmente publicado por modernclics Ver mensaje
    Hola, estoy dando mis primeros pasos en Java y me puse a hacer un simple reloj.

    Utilicé la clase "Calendar" para que me devuleva las horas, minutos y segundos.

    Pero cuando horas minutos o segundos son menores que diez no me rellena con ceros.

    Hice un pequeño ejemplito que arma un string fecha rellenando los ceros:

    Código:
    public void actualizarHora () {
    //consulta la hora en Calendar
    //y la pasa al string fecha    
        
    fecha="";    
    now = Calendar.getInstance();
    h = now.get(Calendar.HOUR);
    m = now.get(Calendar.MINUTE);
    s = now.get(Calendar.SECOND);
    
    //como Calendar no rellena con ceros si h,m o s es menor que diez
    //aca me encargo de eso
    if (h < 10)
        this.fecha += "0";
    this.fecha += h +":"; 
    
    if (m < 10)
        this.fecha += "0";
    this.fecha += m +":";
    
    if (s < 10)
        this.fecha += "0";
    this.fecha += s;
    
    
    
    }
    
    Mi duda es si este paso de armar la fecha agregando ceros se puede evitar con algún método de la clase Calendar o alguna otra clase (Date, Dateformat).

    Muchas Gracias.

    Tal cual suponés, se puede hacer exactamente lo mismo con la clase DateFormat de la siguiente manera:

    Código:
    String fecha = "";
    Calendar now = Calendar.getInstance();
    Date horas = now.getTime();
    
    DateFormat df = DateFormat.getTimeInstance();
    fecha = df.format(horas);
    

    La forma que puse acá lo pone por defecto según la información regional de la PC en que se ejecute. Lo podés forzar a otras conversiones a gusto usando "DateFormat.getTimeInstance(xxx)".


    Si querés tener un control más directo, también se puede formatear el texto directamenta a tu gusto. Si usas versión de Java 1.5 o superior podés hacer así:

    Código:
    String fecha = "";
    Calendar now = Calendar.getInstance();
    int h = now.get(Calendar.HOUR);
    int m = now.get(Calendar.MINUTE);
    int s = now.get(Calendar.SECOND);
    
    fecha = String.format("%02d:%02d:%02d", h, m, s);
    

    Espero te haya servido. Cualquier duda preguntá!
    Me gusta este mensaje
  • #3 Re: Primeros pasos en java (duda)

    Perfecto, después lo pruebo.
    Me gusta este mensaje
  • #4 Re: Primeros pasos en java (duda)

    Funciono perfecto, gracias.

    Estuve investigando el uso de TimeZone pero no logro cambiar la fecha a otra zona.

    Esto es lo que hice y no funciona:

    Código:
    public void actualizarHora () {
        
        calendario=calendario.getInstance();
        calendario.setTimeZone(tz.getTimeZone("Japan"));
        hora=calendario.getTime();
        fecha=df.format(hora);
        
           
    }
    
    Me sigue dando la hora local.

    Voy a seguir investigando, igual agradeceria que me den una mano .
    Me gusta este mensaje
  • #5 Re: Primeros pasos en java (duda)

    Originalmente publicado por modernclics Ver mensaje
    Funciono perfecto, gracias.

    Estuve investigando el uso de TimeZone pero no logro cambiar la fecha a otra zona.

    Esto es lo que hice y no funciona:

    Código:
    public void actualizarHora () {
        
        calendario=calendario.getInstance();
        calendario.setTimeZone(tz.getTimeZone("Japan"));
        hora=calendario.getTime();
        fecha=df.format(hora);
        
           
    }
    
    Me sigue dando la hora local.

    Voy a seguir investigando, igual agradeceria que me den una mano .

    El tema pasa por lo siguiente: la "zona" no es algo que tenga que ver un Objeto Date sino que tiene que ver con un Calendario o un DateFormat que da formato a la hora.

    mirá el ejemplo siguiente:

    Código:
    Calendar calendario = Calendar.getInstance();
    calendario.setTimeZone(xxx);
    Date hora = calendario.getTime();
    
    Si vos a un Calendar le "seteas" un TimeZone con setTimeZone, todo bien, pero luego si hace getTime ese objeto Date que te devuelve no tiene nada que ver con zonas, representa una fecha y hora en un formato absoluto.
    Por esto el código que vos pusiste no hace lo que pretendés.

    Si vos lo que necesitás es poder obtener información independiente de hora, minuto, etc según el Locale, tenés que hacer como pusiste de ejemplo, pero no usando el Date que te devuelve getTime, de la siguiente forma como ej:

    Código:
    Calendar calendarioLocal = Calendar.getInstance();
    TimeZone tzJapon = TimeZone.getTimeZone("Japan");
    Calendar calendarioJapon = Calendar.getInstance(tzJapon);
    
    int hl = calendarioLocal.get(Calendar.HOUR_OF_DAY);
    int ml = calendarioLocal.get(Calendar.MINUTE);
    int sl = calendarioLocal.get(Calendar.SECOND);
    System.out.println("Local: hora: " + hl + " minutos: " + ml +
    		" segundos:" + sl);
    
    int hj = calendarioJapon.get(Calendar.HOUR_OF_DAY);
    int mj = calendarioJapon.get(Calendar.MINUTE);
    int sj = calendarioJapon.get(Calendar.SECOND);
    System.out.println("Japón: hora: " + hj + " minutos: " + mj +
    		" segundos:" + sj);
    
    Si lo que vos querés hacer es REPRESENTAR esa hora según diferentes TimeZones, lo que podés hacer es indicarle a un DateFormat el TimeZone para que use, de la siguiente manera:

    Código:
    Calendar calendario = Calendar.getInstance();
    DateFormat df = DateFormat.getTimeInstance();
    TimeZone tzJapon = TimeZone.getTimeZone("Japan");
    Date horaLocal = calendario.getTime();
    
    System.out.println(df.format(horaLocal));
    
    df.setTimeZone(tzJapon);
    
    System.out.println(df.format(horaLocal));
    
    Espero que te sea de ayuda, cualquier duda preguntá!!
    Me gusta este mensaje
  • #6 Re: Primeros pasos en java (duda)

    Funciona barbaro, ahora tengo problemas para setear la hora local. Mi idea es hacer un reloj universal y que por defecto cuando se inicie muestre la hora local, si en getTimeZone pongo "local" me tira 3 horas mas de lo que seria correcto.

    Ah, ya lo solucione inicianizando a tz con TimeZone.getDefault();
    Me gusta este mensaje
Estás en: Inicio >> Foros >> Informática >> Programación


Estadísticas del tema
  • 5 RESPUESTAS
  • 11868 VISTAS
  • 2 USUARIOS RESPONDIERON
 
Ir arriba
Contacto | Acerca de | Ayuda | Términos Legales | privacidad | Pautas de convivencia | Mapa de los foros | TrabajÁ con nosotros
©2008 Psicofxp.com S.A. - Todos los derechos reservados
Certifica IAB