Si eres usuario
Ingresa aquí »
¿Eres nuevo?
Regístrate
  • Google
  • Artículos
  • Foros
  • Fotos
  • Videos
  • Amigos
Estás en: Inicio / Foros / Informática / Programación

Respuesta
 
LinkBack Herramientas Buscar en este tema
Mono maestre
[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.
Mandril
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á!
Mono maestre
Re: Primeros pasos en java (duda)
Perfecto, después lo pruebo.
Mono maestre
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 .
Mandril
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á!!
Mono maestre
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();
 
Respuesta



Herramientas Buscar en este tema
Buscar en este tema:

Búsqueda avanzada
Califica este tema
Califica este tema:


Este tema está relacionado con otros ya publicados en el sitio. Podés visitarlos ahora!
Tema Iniciado por Foro Resp. Último mensaje
Primeros Pasos... maleroju Bellas Artes 8 14.04.2009 11:35 hs.
primeros pasos ral_03 Programación 6 31.07.2006 05:01 hs.
Primeros pasos... takale Hardware 0 20.04.2006 23:22 hs.
Primeros pasos fernandez_jd Programación 4 14.09.2005 22:15 hs.
Primeros pasos... PoetaCamba Avatares y Firmas 35 22.07.2003 01:02 hs.

Ranking de temas y usuarios de este foro
Temas populares Usuarios más activos
• Cliente Servidor UDP en C#
• Ayuda-Como Insertar filas en un JTable y...
• Juego de Truco Open Source - Se necesitan...
• Leer/escribir archivos binarios
• Necesito AYUDA-ALGORITMOS!
• AGUSTIN_RAMONE
• pangus
• ExtrañoInocente
• -HeavenMight-
• Kryptonyte


 
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
CertificaIAB
{{diadelamigo}}