es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for 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 clase java.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:

    public static Timestamp convertGMTtoLocal(Timestamp gmtTimestamp, String timezone) {
        // establecer la zona horaria
        TimeZone tz = TimeZone.getTimeZone(timezone);
    
        // crear un objeto de calendario con la zona horaria establecida
        Calendar calendar = Calendar.getInstance(tz);
    
        // establecer la hora del calendario en la marca de tiempo GMT
        calendar.setTime(gmtTimestamp);
    
        // obtener la marca de tiempo local del calendario
        Timestamp localTimestamp = new Timestamp(calendar.getTimeInMillis());
    
        return localTimestamp;
    }
    

    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:

    Timestamp gmtTimestamp = new Timestamp(System.currentTimeMillis());
    String timezone = "America/Los_Angeles";  // o cualquier otra cadena de zona horaria válida
    Timestamp localTimestamp = convertGMTtoLocal(gmtTimestamp, timezone);
    

    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.

Comments are closed.