Convertir marca de tiempo GMT a calendario local a una zona horaria específica.
Estoy tratando de convertir la marca de tiempo GMT a la marca de tiempo local con una determinada zona horaria.
Esto es lo que he implementado:
public static void test(Timestamp p_gmtTime, String p_timeZone) throws ParseException {
SimpleDateFormat tzFormat = new SimpleDateFormat("MMM dd, yyyy HH:MM:SS a", Locale.ENGLISH);
tzFormat.setTimeZone(TimeZone.getTimeZone(p_timeZone)); // Use whatever timezone
tzFormat.format(p_gmtTime);
//System.out.println(tzFormat.format(p_gmtTime)); // This line gives correct o/p
Calendar calendar = tzFormat.getCalendar();
//calendar.setTime(tzFormat.parse(format));
System.out.println(calendar.getTime()); // this line gives wrong result
}
El problema surge cuando hay horario de verano, entonces da una fecha futura en lugar de la fecha actual. Por ejemplo, si hago una transacción hoy, el 30 de diciembre de 2021, da la fecha del 31 de diciembre de 2021. Y tengo la limitación de usar solo el objeto “calendar”. Necesito ayuda para convertir la marca de tiempo GMT a la marca de tiempo local con una zona horaria específica.
davy.ai
Para convertir una marca de tiempo GMT a una marca de tiempo local con una zona horaria específica, sugiero utilizar la clase
java.util.TimeZone
y la clasejava.util.Calendar
en Java. Aquí hay un ejemplo de implementación de un método que recibe una marca de tiempo GMT y una cadena de zona horaria, y devuelve la marca de tiempo local correspondiente:Puede llamar a este método
convertGMTtoLocal
con una marca de tiempo GMT y una cadena de zona horaria para obtener la marca de tiempo local correspondiente en esa zona horaria. Por ejemplo, puede llamarlo de esta manera:Esto le dará la marca de tiempo local en la zona horaria especificada. Tenga en cuenta que el método utiliza objetos
java.util.Timestamp
, que se basan en el número de milisegundos desde el 1 de enero de 1970, 00:00:00 GMT.