Convirtiendo fechas entre zonas horarias (2)

sábado, 12 de diciembre de 2009

En mi anterior post titulado Convirtiendo fechas entre zonas horarias puse un ejemplo de cómo poder convertir una fecha/hora de una zona horaria local a una distinta. Pero trabajando con el mismo proyecto encontré que debía convertir una fecha de la zona horaria UTC a la local, y entonces mi líder técnico me dió una solución sencilla cambiando solo una línea del código de ejemplo del post anterior, justo para hacer lo que necesitaba en ese momento:

En la tarea que estaba realizando leía un archivo de texto con el dato "fecha" como una serie de números: "20090921"+"1230", que representa el 21 de Septiembre de 2009 a las 12:30; por lo que tuve que usar el formato de fecha "yyyyMMddkkmm". Esta fecha que recibía del archivo representaba una fecha/hora en el horario GMT. Y esta hora la debía pasar a mi zona horaria local que es CST o UTC-6 (Tiempo del centro).

public void cambiarZonaHoraria( String fecha, String patron, String tz ) {
SimpleDateFormat format = new SimpleDateFormat( patron );
format.setTimeZone(TimeZone.getTimeZone( tz ));
try {
System.out.println( format.parse( fecha ) );
} catch (ParseException pe) {
pe.printStackTrace();
}
}


Lo que hace es muy sencillo:
  • Primero crea una nueva instancia de SimpleDateFormat con el parámetro "patron" que le dice a la instancia que el texto que se le va a enviar está en ese formato, en mi caso "yyyyMMddkkmm".
  • Luego, lo más importante de lo que intentamos hacer, le asignaremos a nuestro objeto format el TimeZone en el que está la hora que queremos convertir, en mi caso era GMT.
  • Posteriormente, simplemente usamos el método parse(String) para convertir nuestro texto a un Date en la zona horaria local, en mi caso CST; por lo que el resultado final de este ejemplo es que el texto "200909211230" con el formato "yyyyMMddkkmm"lo cual representa "2oo9/09/21 12:30" en GMT pasa a ser "2009/09/21 6:30" en CST ya que son 6 horas menos a la referencia del Tiempo Universal Coordinado o UTC.
Solo debemos recordar cachar las excepciones o hacer un throw de ellas.

Convirtiendo fechas entre zonas horarias

domingo, 6 de diciembre de 2009

En cierto proyecto en el que estoy involucrado tuve que convertir algunas fechas en el huso horario UTC (GMT) a la zona horaria CST (Tiempo del centro) que es el que usa la mayoría de los estados en México. Como el proyecto está enteramente basado en tecnología Java, me di a la tarea de encontrar formas de hacer esto con librerías para Java.

Encontré que hay algunas librerías, como las de Quartz, implementan alguna clase para la conversión de zonas horarias. Pero en mi caso, necesitaba no depender tanto de librerías de terceros o fuera del API de Java.

Encontré que con las clases TimeZone y DateFormat puedo hacer la conversión usando las siguientes sentencias.


public void cambiarZonaHoraria(Date fecha, String to) {
DateFormat dateFormat = new SimpleDateFormat();
TimeZone tz = TimeZone.getTimeZone(to);
dateFormat .setTimeZone(tz);
System.out.println(dateFormat.format(fecha));
}


Lo que se hace básicamente es

  • crear una instancia de SimpleDateFormat con el formato de fecha local
  • crear una instancia del TimeZone con el nombre corto de la zona horaria que se especifique por el parámetro "to"
  • se asigna la nueva zona horaria al objeto dateFormat
  • haciendo uso del método format() del objeto dateFormat se hace la conversión de nuestra fecha a una cadena que representa la nueva fecha en la zona horaria que hemos creado, y esta fecha se imprime en pantalla.
De la misma forma se pueden hacer conversiones entre distintos husos y zonas horarias.
Ahora, cabe señalar que para crear un TimeZone se usa el nombre corto de la zona horaria. Aquí dejo un listado de zonas horarias con sus nombres e IDs que he obtenido ejecutando este pequeño programa que encontré en Java Developers Almanac:

import java.util.Date;
import java.util.TimeZone;

public class ListadoZonasHorarias {

public static void main( String[] args ) {
Date fecha = new Date();
// Obtiene el ID de todas las zonas horarias
String[] zoneIds = TimeZone.getAvailableIDs();

System.out.println(" ID | Nombre corto | Nombre largo |Diferencia horaria \n");
for (int i=0; i<zoneIds.length; i++) {
// Ontiene el TimeZone dependiendo del ID e imprime el ID
TimeZone tz = TimeZone.getTimeZone(zoneIds[i]);
System.out.print(tz.getID() + "\t|");

// Obtiene e imprime el nombre corto y largo de la zona horaria
String shortName = tz.getDisplayName(tz.inDaylightTime(fecha), TimeZone.SHORT);
String longName = tz.getDisplayName(tz.inDaylightTime(fecha), TimeZone.LONG);
System.out.print(shortName + "\t\t|");
System.out.print(longName + "\t|");

// Obtiene e imprime la cantidad de horas de diferencia al huso GMT
int ro = tz.getRawOffset();
int horas = ro / (60*60*1000);
int minutos = Math.abs(ro / (60*1000)) % 60;
System.out.print(horas + ":" + minutos);
System.out.println();
}

}
}

Espero que les pueda servir como a mí. Saludos.

An internal error occurred during: "JSP Content Validator".

lunes, 31 de agosto de 2009

En la oficina en donde trabajo usamos Myeclipse como IDE y constantemente cuando editamos archivos XML o JSP en algunos proyectos, usando MyEclipse 6.0.1 GA, comunmente nos lanza una ventana emergente cada vez que intentamos guardar este tipo de archivos con los siguientes errores:

An internal error occurred during: "JSP Content Validator".
org/eclipse/wst/sse/ui/internal/reconcile/validator/ValidationHelper
An internal error occurred during: "JSP Semantics Validator (JSF)".
org/eclipse/wst/sse/ui/internal/reconcile/validator/ValidationHelper
An internal error occurred during: "JSP Syntax Validator".
org/eclipse/wst/sse/ui/internal/reconcile/validator/ValidationHelper
Y como ya se me acabó la paciencia, estuve investigando y al parecer son muchos los que tienen el mismo problema, sin embargo encontré una solución rápida pero nada atractiva, la cual es desactivar las validaciones de JSP y JSF.

Para hacer esto debemos abrir la ventana de preferencias que está en el menú MyEclipse-->Preferences...

Y desactivar las casillas para

  • JSF Application Configuration Validator,
  • JSP Content Validator,
  • JSP Semantics Validator,
  • JSP Syntax Validator

Con esto tendremos solucionado provisionalmente el error de las validaciones que muestran esas molestas ventanas emergentes cada vez que queremos guardar una archivo JSP o XML.

Comenzando con Java (1)

Como lo prometido es deuda, y para no reinventar la rueda, decidí que en vez de grabar un video tutorial y aburrirlos con mi voz, mejor les daré acceso a algunos videos que otros ya han hecho de manera muy profesional.

1. Los primeros videos son unos que me encontré mientras buscaba cómo poder ayudar a unos compañeros a los que les dí tutorías. Son unos videos que comienzan desde los aspectos básicos de Java pasando por el IDE, conceptos, bifurcaciones, iteraciones, vectores y algunos ejemplos.

http://www.videoaprendizaje.com/index.php?topic=536.0

2. Los siguientes son una serie de videos muy profesionales con el propósito de ser un curso hacia la certificación SCJP del Ing. Julio César Fuenes Ochoa liberado bajo licecia Creative Commons. Se pueden descargar dos versiones del mismo autor, de dos sitios distintos.

http://locx24.wordpress.com/2009/02/23/curso-en-videotutoriales-de-java-se-50/

http://www.kootbox.com/component/option,com_remository/Itemid,27/func,select/id,6/orderby,2/page,1/

En fin, espero que disfruten de estos videotutoriales y les sea de mucho provecho. Sigan visitándonos, pronto pondremos videos con propósitos más específicos. Si tienen peticiones puden enviarlas o seguirnos vía Twitter.


Publicado originalmente en http://swcoders.com

¿PHP o Java?

domingo, 23 de agosto de 2009

A veces algunos amigos me preguntan qué lenguaje de programación deberían aprender, y yo les digo -el que quieras-. Pero sinceramente es un poco más complicado, porque les debería preguntar primero -Bueno, ¿qué es lo que quieres hacer?-

Pero tal vez la pregunta debería redefinirse y ahora explico porqué…

Porque recuerdo que en una clase nos dejaron la tarea de comparar las tecnologías PHP, Java y .NET. Sin embargo yo creo que ambas tecnologías, PHP y Java, no pueden compararse, y no quiero decir que PHP no le llegue a los talones a Java, no me malinterpreten.

Debemos tener presente qué es PHP. PHP es una tecnología de programación para Web; para eso fue creado. Sin embargo Java es una plataforma tecnológica con el que se pueden hacer aplicaciones Web, de escritorio, móviles, y un largo etcétera. Tal vez, la comparación que debería hacerse es “¿Qué necesito para lo que quiero hacer, PHP o JSP/Servlets?”. Ya que los JSP y Servlets son un conjunto de APIs de Java que permiten programar aplicaciones para Web. Además de estos, Java cuenta con decenas de otras definiciones con los que se pueden hacer infinidad de cosas.

Por eso, si me preguntan -¿Qué lenguaje de programación deberían aprender?-, yo podría preguntarles -¿Qué es lo que necesitas hacer?- Porque con JSP y Servlets puedes hacer lo que harías con PHP y mucho más.

Ahora, no quiero caer en que se puede programar en Java igual que se haría con PHP, porque también hay que reconocer que existe una curva de aprendizaje mayor en el lenguaje Java que en PHP. Y sin mencionar que cuando uno quiere hacer cosas más complejas y robustas tendrá que aprender a usar algún framework para lograr su trabajo.

Por fuera de todo eso, lo que siempre recomiendo es, aprende Java, ya que los programadores Java tienen una gran demanda en México y muchos países y son muy bien pagados. Hay mucha documentación gratuita y profesionales dispuestos a ayudar.

Por eso, únete a nosotros y síguenos constantemente para ir aprendiendo Java. Próximamente comenzaremos con los videos…


Publicado originalmente en http://www.swcoders.com.

¿Cómo puedo aprender Java?

jueves, 13 de agosto de 2009

En el blog de http://www.swcoders.com hace algún rato publiqué un post donde explico cinco sugerencias sobre cómo aprender a programar en Java, y para cualquier lenguaje de programación funciona igualmente. Pues este es un copy&paste del mismo:

En varias ocasiones mis amigos me han preguntado sobre cómo podrían comenzar a aprender a programar en Java. Pues lo que siempre les he respondido es “leyendo y haciendo“. Cuando aprendí a programar en Java fue gracias a unos amigos que me decían lo mismo, pero ¿de dónde leer?, lo que estos amigos me decían, y lo que yo respondo ahora a los que me hacen la pregunta es que “Google tiene todas las respuestas“, bueno, aveces no todas.

Es que para aprender a programar en cualquier lenguaje y para ser aficionado a la programación, la persona debe ser un investigador nato. Y si has llegado aquí es porque estás buscando aprender, y estamos para facilitarte el aprendizaje.


Leyendo. Hay muchos tutoriales esparcidos por toda la Web, solo es cosa de saber buscar. Pues si pones “tutorial OR manual Java” en cualquier buscador obtendrás cientos de guías de aprendizaje de Java. Solo es cosa de que te sientes un fin de semana con café y frituras frente a la computadora. Si eres más tradicional, pues hay cientos de libros muy baratos en mercadolibre.com, aunque también los hay en formato electrónico. Un lugar al que siempre voy es a www.g2p.org que te ayuda con los hacks de google para buscar en los índices de servidores buscando lo que tú quieras.

Haciendo. Muchos tutoriales tienen ejemplos de práctica básicos con los que puedes comenzar a jugar. En los mismos tutoriales te explican cómo configurar tu ambiente en Windows o Linux para poder programar en Java.

No temerle al inglés. Un factor de miedo que veo en muchas ocasiones en algunos amigos que quieren aprender a programar es que muchos libros y tutoriales que consiguen están en inglés. Pero para ser aficionado a la informática en general, debes aprender a no temerle a los idiomas, y no me refiero a que seas políglota; pero como mínimo, deberás estar aprendiendo a leer el inglés mientras aprendes a programar. Pero no temas, actualmente hay muchísima información y tutoriales en Español muy profesionales y sencillos con los que puedes aprender.

Foros. También puedes suscribirte a foros donde puedes hacer preguntas respecto de tus dudas y te aseguro que más de un programador Java estará dispuesto y tendrá la respuesta que buscas. Algunos son: Foros FIT, javahispano.org, programacion.com, programacionweb.net, forodejava.com.

Podcasts. Los podcast son un medio con el cuál puedes mantenerte actualizado sobre las últimas noticias y nuevas herramientas acerca de Java. Esto te ayudará a abrirte la mente a muchas cosas que existen en el mundo Java que tal vez desconozcas. El podcast que escucho con más frecuencia es el de javahispano.org, y el de javaposse.com, en inglés.


La nota original esta aquí.

Te invito a darte una vuelta por SWCODERS y ver el material y tutoriales que hay.

Software Gurú 09 Conferencia y Expo en Monterrey

jueves, 23 de julio de 2009

Hace ya unos meses se anunció que el magno evento de software en México se realizaría en la ciudad de Monterrey, del 27 al 30 de Septiembre. Pues bien, a los que gustan de aprender nuevas tecnologías y las mejores prácticas del sector laboral los invito a asistir.
Lo mejor es aprovechar los descuentos de la tarifa temprana, y por si no se enteraron, hubo también una promoción (competencia) en la que podías ganarte un pase a las conferencias si eras el que mayor cantidad de herramientas registrase en SGguía, bueno, pues el pase me lo gané yo.... XD
Si se animan, ahí nos vemos.

Enlace: http://www.sg.com.mx/sg09/

Super Clásico Chihuahua 2009

martes, 9 de junio de 2009

Estamos pensando ir nuevamente al Superclásico Chihuahua, nuevamente con Dante Gebel e invitados especiales. La promo está lista en la página de la Iglesia Amistad Cristiana de Chihuahua.

La promo
http://www.amistad.com.mx/superclasico/html/pr09.html

La primera versión fue imperdible, esta no será la excepción.

Visita swcoders.com

jueves, 26 de marzo de 2009

Después de mucho tiempo, y de verdad fue mucho tiempo, sin escribir en mi blog, quiero invitarlos a visitar el blog swcoders.com.

Estuve ausente porque unos compañeros y yo estábamos preparando un proyecto y también habíamos pensado tener un blog en colaboración. Pues bien, aunque tardamos mucho por varias razones, finalmente nació swcoders.com. Aquí hablaremos de varias tecnologías de programación como son Java, PHP, Extjs, Linux, etc.

Mi nombre de usuario es Jesfre, y también pueden seguirme vía Twitter. Estoy a cargo junto a hnao de la sección Java. Visítanos y comparte con nosotros tus dudas y comentarios.
Muchas gracias por haber visitado mi antiguo blog.