Cómo convertir una fecha Java en un formato de zona horaria específica

En el último ejemplo, aprendimos cómo convertir una fecha a una cadena en Java. En este ejemplo, estoy convirtiendo un objeto Date de Java de una zona horaria a otra. Utilizaremos la clase SimpleDateFormat para dar formato a la fecha en un formato específico y configuraremos su zona horaria para imprimir la fecha en una zona horaria específica.

package com.journaldev.util;

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

public class DateFormatter {

	/**
	 * Utility function to convert java Date to TimeZone format
	 * @param date
	 * @param format
	 * @param timeZone
	 * @return
	 */
	public static String formatDateToString(Date date, String format,
			String timeZone) {
		// comprobación de nulo
		if (date == null) return null;
		// crear objeto SimpleDateFormat con el formato de entrada
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		// zona horaria del sistema por defecto si se pasa null o está vacío
		if (timeZone == null || "".equalsIgnoreCase(timeZone.trim())) {
			timeZone = Calendar.getInstance().getTimeZone().getID();
		}
		// establecer la zona horaria en SimpleDateFormat
		sdf.setTimeZone(TimeZone.getTimeZone(timeZone));
		// devolver la fecha en el formato requerido con la zona horaria como cadena
		return sdf.format(date);
	}

	public static void main(String[] args) {
		// Probar el método formatDateToString
		Date date = new Date();
		System.out.println("Default Date:"+date.toString());
		System.out.println("System Date: "+formatDateToString(date, "dd MMM yyyy hh:mm:ss a", null));
		System.out.println("System Date in PST: "+formatDateToString(date, "dd MMM yyyy hh:mm:ss a", "PST"));
		System.out.println("System Date in IST: "+formatDateToString(date, "dd MMM yyyy hh:mm:ss a", "IST"));
		System.out.println("System Date in GMT: "+formatDateToString(date, "dd MMM yyyy hh:mm:ss a", "GMT"));
	}

}

Aquí está la salida del programa:

Default Date:Wed Nov 14 21:37:01 PST 2012
System Date: 14 Nov 2012 09:37:01 PM
System Date in PST: 14 Nov 2012 09:37:01 PM
System Date in IST: 15 Nov 2012 11:07:01 AM
System Date in GMT: 15 Nov 2012 05:37:01 AM

Desde la salida, es claro que mi zona horaria del sistema es PST y luego está convirtiendo el mismo objeto Date a diferentes zonas horarias como IST y GMT y lo está imprimiendo. Usando mi último tutorial, puedes volver a convertir la cadena devuelta en un objeto Date. Actualización: Java 8 ha añadido una nueva API de Fecha y Hora, deberías echarle un vistazo en Java 8 Date.

Source:
https://www.digitalocean.com/community/tutorials/how-to-convert-java-date-into-specific-timezone-format