Como converter uma data Java para um formato específico de fuso horário

No último exemplo, aprendemos como converter Data para String em Java. Neste exemplo, estou convertendo um objeto Date do Java de um fuso horário para outro. Usaremos 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 passado 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 necessário 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, está claro que o fuso horário do meu sistema é PST e depois está convertendo o mesmo objeto Date para diferentes fusos horários como IST e GMT e imprimindo-o. Usando meu último tutorial, você pode novamente converter a string retornada para um objeto Date. 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