lunes, 14 de abril de 2008

Cambiar fecha y hora en GNU/Linux

En muchas ocasiones con el cambio de horario de verano nuestros equipos no hacen el cambio automático de horario o quizas deseamos cambiarle el horario a un equipo remotamente o simplemente no tenemos correctamente configurada la hora en nuestro equipo. Para hacer el cambio de fecha de hora es muy sencillo, deberemos ejecutar los date y hwclock.

Para poner un ejemplo, cambiaremos la hora de nuestro equipo al día 14 de abril de 2008 a las 14:00 hrs.

Empecemos, lo primero que hay que realizar es convertirnos en el usuario root.

$ su -

Ahora deberemos ejecutar el siguiente comando:

$ date --set "2008-04-14 14:00:00"

Este cambio funcionará para la sesión actual, pero en el momento de reiniciar nuestro equipo se cambiará a la hora asignada en el BIOS, por lo cual, deberemos también cambiar la hora del BIOS. La forma de cambiar la hora del BIOS es usando el comando hwclock de la siguiente manera:

$ hwclock --set --date="2008-04-14 14:00:00"

Listo, ha quedado configurada la nueva fecha y hora en nuestro equipo con GNU/Linux.

8 comentarios:

Anónimo dijo...

Hola javoaxian, es bueno tu articulo de verdad no sabia sobre el comando hwclock.
Sabes estoy realizando una aplicacion con eclipse y no me toma la fecha del sistema, osea la fecha esta correcta pero al realizar:
fechaActual = new Date();
me toma la fecha media hora mas, me supongo que tiene que ver el cambio de uso horario que hubo en mi pais Venezuela.
Porfa si me puedes ayudar.
bye.
Att. binario01

javoaxian dijo...

Hola, supongo que estás haciendo tu aplicación en Java.

Quizas el problema sea con tu versión de Java que no tenga actualizadas la base de datos de zonas horarias, ya que maneja un sistema independiente al del equipo.

Tal vez Timezone Updater Tool te puede servir ya que actualiza la base de datos de zonas horarias de Java.

Aquí te dejo un artículo donde explican un poco más sobre este tema.

Otra opción es que uses la clase GregorianCalendar en lugar de Date.

Espero que esto te pueda ayudar con tu problema.

Anónimo dijo...

Hola pana ya intente cambiar la hora con Timezone Updater Tool pero no he podido solucionar mi problema.
La hora del s.o. esta bien y uso jre 6.0. pero al usar Date,GregorianCal,Calendar todos toman la hora diferente a la del s.o.
tambiem probe con windown y sale lo mismo.

porfavor si me puedes explicar como.

estoy realizando una aplicacion con java para controlar la asistencia del personal. y capturar la hora exacta la cual es un dato de suma importancia.

javoaxian dijo...

Hola, he estado revisando tu problema y haciendo algunas pruebas, he cambiando la fecha a la de Venezuela en mis equipos y al correr mis pruebas me devuelve la hora del sistema operativo correcta según los ajustes. Yo uso el JDK 6 no el JRE 6, quiza te serviría cambiar al JDK.

De acuerdo a esta página, la diferencia entre Venezuela-Caracas y México-Distrito Federal es de media hora. Si ésto es correcto, entonces el siguiente código de java me funcionó y me devolvió la hora correcta de tu país:

Locale l = new Locale("es","VE");
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("America/Caracas"),l);
System.out.println("FECHA: " + cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH)+1) + "-" + cal.get(Calendar.DATE) + " " + cal.get(Calendar.HOUR) + ":" + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND));


Otra opción aunque no me agrada mucho, es que obtengas la fecha del sistema ejecutando el comando date en el caso de UNIX o GNU/Linux, por ejemplo:

Process proceso = Runtime.getRuntime().exec("date +%H:%M:%S");
BufferedReader salida = new BufferedReader(new InputStreamReader(proceso.getInputStream()));
String sFecha = salida.readLine();
System.out.println("Fecha: " + sFecha);


También, si lo que necesitas es guardar la fecha y la hora y manejas una base de datos, puedes usar las instrucciones del manejador de base de datos para guardar la fecha y hora directamente desde el manejador y no con java.

Por si te interesa, encontré 2 artículos (uno y dos) que te explican como cambiar la hora automáticamente para el cambio de horario de Venezuela en Debian.

Ojala que esto te solucione tu problema, sino seguremos buscando.
Saludos!!!

Anónimo dijo...

Muchas gracias mi pana, la verdad me sirvio al pelo el codigo que me distes, instale jdk6 pero el problema seguia, pero con el codigo:
Locale l = new Locale("es","VE");
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("America/Caracas"),l);
me funciono todo bien.

yo lo usaba asi: Calendar cal = Calendar.getInstance(TimeZone.getTimeZone());
y me daba la hora incorreta la misma que me da el Date.
tenia que indicarle mi ubicacion.

muchas gracias.

mira pana sabes aprovechando te cuento estoy realizando mis pasantias. y me asignaron el proyecto de sistema de asistencia, y ya con lo que me distes me quedo bien. pero necesito reportes. me djieron que usara iReport, me gustaria saber tu opinion sobre reportes en java y que me suguieres y donde descargar lo que me suguieras por favor.
Gracias.

javoaxian dijo...

Hola, esa es una buena alternativa, me han comentado de ella, yo no he usado reportes en java pero si me han dado buenos comentarios de iReport, usalo a ver si te conviene, igual y yo me hago un tiempo y lo pruebo a ver que tal funciona.

Perdón por no poderte ayudar más en este caso.

Saludos.

Anónimo dijo...

Hola!!

oye tengo un fuerte problema y me urge resolverlo solo que he intentado de todo y no lo he podido resolver, estoy obteniendo la fecha actual de mi sistema desde java pero, lamentablemente me agrega 6 horas, ya realice los cambios que sugieres y aun asi no lo hace, ojala pudieras ayudarme, yo no utilizo debian ni linux yo utilizo XP.

muchas gracias por leer este comentario, de verdad!!!

Anónimo dijo...

Hola amigo hace como 4 dias actualize mi motorola dext mb200 en el tutorial que tu isiste para ese celular!,, todo salio bien ecepto la hora y feha del celular me sale 31 de diciembre de 1969 y no lo puedo cambia y tampoco puedo crear una cuenta por qe dice que hay un error en el reloj ayudame porfavor!!