Java: convertir fecha y hora a otra zona horaria

Es bastante sencillo, utilizando la clase DateFormat (y derivados), convertir un conjunto fecha/hora a otra zona horaria.

Código a continuación:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

/**
 * Simple Java program to convert local time into GMT or any other TimeZone in Java
 * SimpleDateFormat in Java can be used to convert Date from one timezone to other
 * @author Javin
 */
public class TimeZoneConverter {

    public static void main(String args[]) {

     //Date will return local time in Java
     Date localTime = new Date(); 

     //creating DateFormat for converting time from local timezone to GMT
     DateFormat converter = new SimpleDateFormat("dd/MM/yyyy:HH:mm:ss");

     //getting GMT timezone, you can get any timezone e.g. UTC
     converter.setTimeZone(TimeZone.getTimeZone("GMT"));

     System.out.println("local time : " + localTime);;
     System.out.println("time in GMT : " + converter.format(localTime));

    }   

}

Si ejecutamos, la salida es:

local time : Wed Apr 11 05:48:16 VET 2012
time in GMT : 11/04/2012:10:18:16

La clase TimeZone por su parte permite especificar el huso horario en varios formatos diferentes, que podemos ver en este enlace.

Vía | Java Revisited

Varargs en Java: número variable de argumentos en Java

Es posible implementar métodos con un número variable de argumentos en Java, desde la versión 5.

Las condiciones a cumplir son las siguientes:

  1. Los parámetros variables tienen todos el mismo tipo (o son instancias del mismo objeto).
  2. Hay cero o más parámetros variables.
  3. Sólo hay un conjunto de parámetros variables.
  4. El conjunto de parámetros variables viene al final de la definición del método.

Como ejemplo, la definición del método java.io.PrintStream.printf():

public PrintStream printf(String format,
                          Object... args)

Continue reading

Java: recorrer una estructura de árbol usando Stacks sin llamadas recursivas

Consideramos una estructura de árbol, formada por objetos que heredan de Node. Cada objeto, subclase de Node, puede tener hijos que a su vez son subclases de Node.

Podemos recorrer el árbol de objetos, sin utilizar llamadas recursivas, utilizando el código que se muestra a continuación:

/**
* Returns a {@link Stack} having a Tree ordered in Depth First whose root is passed as the Parameter
*
* @param The implementation of {@link Node}
* @param treeRoot The root of the tree
* @return The {@link Stack} of T
*/
public static Stack depthFirstOrder(final T treeRoot)
{
   // Main stack, where the important stuff go
   Stack mainStack = new Stack();

   // Temp child stack, where we store children of before it gets put to the mainStack
   Stack tempChildStack = new Stack();

   mainStack.push(treeRoot);   // Put the tree root
   tempChildStack.addAll(treeRoot.getChildren()); // Put the children to the temp

   // Loop until no more children in the temp stack
   while (!tempChildStack.isEmpty())
   {
      T node = (T) tempChildStack.pop();   // Keep popping from the temp stack..
      mainStack.push(node);   // .. and Push to the main stack..
      tempChildStack.addAll(node.getChildren()); // .. while adding children to temp
   }

   // Now temp stack is empty and mainStack has things in DFS order!
   return mainStack;
}

Vía | gunith

Android: convertir dp a pixels

En Android, a veces, es necesario hacer un tratamiento del tamaño de ciertos elementos en pixels, durante la ejecución de la aplicación, como por ejemplo en:

view.setPadding(int, int, int, int);

Sin embargo, sabemos que, sobre todo al diseñar interfaces, es muy conveniente utilizar dip (density independent pixel) a la hora de especificar tamaños, para evitar variaciones entre dispositivos con resoluciones diferentes.

De manera que, para ejecutar código como el de arriba (cambios en runtime), podemos hacer lo siguiente:

float sizeInDip = 10f;
int padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, sizeInDip, getResources().getDisplayMetrics());

Vía | James Elsey Blog

Java: invertir el orden de un array

Ahí va un trozo de código, no sólo rápido sino además eficiente, para invertir el orden de un array en Java:

public static  T[] reverse(T[] array) {
    Collections.reverse(Arrays.asList(array));
    return array;
}

Como indica el autor del post original, la ejecución no implica copia de arrays, de manera que resulta rápido y sin efectos laterales (se devuelve el mismo array recibido, con el orden modificado.

Nota acerca de Arrays.asList()

La documentación de esta API muestra que la lista que devuelve es de tamaño fijo. Esto implica que cualquier llamada a add() o remove() devolverá una excepción de tipo UnsupportedOperationException. Si se pasa a través de la interfaz java.util.List el resultado es indefinido, ya que cualquier programador esperaría que un objeto de ese tipo fuera modificable, en el sentido de poder añadir/eliminar elementos.

Vía | http://schneide.wordpress.com

Android: código para leer el log

Sólo se me ocurre una razón para acceder al log directamente, por código, en una aplicación Android, y es con propósito de debug. De hecho, en la vía original, Hello Android, no nombra ninguna otra…

En cualquier caso, allá va el código que permite hacerlo:
Continue reading

Android: evitar que el móvil entre en reposo

A veces una aplicación requiere que el teléfono no entre en modo reposo o ahorro de energía, por ejemplo, como dice el artículo original en inglés, durante una actualización o una descarga crítica.

A continuación se muestra el código para evitar que el gestor de energía pasa el terminal a reposo. Primero creamos una instancia de WakeLock:
Continue reading

Java: parsear un texto – cómo descomponer un texto en palabras, frases, líneas, etc.

El JDK de Java incluye una clase tremendamente útil a la hora de parsear y descomponer un texto en palabras, frases y/o líneas.

La clase es BreakIterator forma parte del paquete java.text. Esta clase está preparada incluso para funcionar con diferentes “locales”, y soporta cuatro tipos diferentes de “límites”, a la hora de determinar cómo “trocear” un texto:

  • Líneas: getLineInstance()
  • Frases: getSentenceInstance()
  • Palabras: getWordInstance()
  • Caracteres: getCharacterInstance()

Además tiene métodos como next() y previous() que puede dar la sensación de estar utilizando un iterador. Sin embargo, estos métodos realmente devuelven un entero que permite localizar dentro de la cadena el comienzo del siguiente item.

Ahí van algunos ejemplos de código:
Continue reading