Como converter uma Data Java em um formato de fuso horário específico

No último exemplo, aprendemos como converter Data para String em Java. Neste exemplo, estou convertendo um objeto Java Date de um fuso horário para outro. Vamos usar a classe SimpleDateFormat para formatar a Data em um formato específico e definiremos seu fuso horário para imprimir a data em um fuso horário específico.

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) {
		// verificação de nulo
		if (date == null) return null;
		// criar objeto SimpleDateFormat com formato de entrada
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		// fuso horário do sistema padrão se nulo ou vazio
		if (timeZone == null || "".equalsIgnoreCase(timeZone.trim())) {
			timeZone = Calendar.getInstance().getTimeZone().getID();
		}
		// definir fuso horário para SimpleDateFormat
		sdf.setTimeZone(TimeZone.getTimeZone(timeZone));
		// retornar Data no formato requerido com fuso horário como String
		return sdf.format(date);
	}

	public static void main(String[] args) {
		//Testar 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"));
	}

}

Aqui está a saída do 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

A partir da saída, fica claro que o fuso horário do meu sistema é PST e, em seguida, está convertendo o mesmo objeto Data para fusos horários diferentes, como IST e GMT, e imprimindo-o. Usando meu último tutorial, você pode novamente converter a string retornada para um objeto Data. Atualização: O Java 8 adicionou uma nova API de Data e Hora, você deve conferir em Java 8 Date.

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