Ajuste de zona horaria en PHP con DateTime / DateTimeZone

Hay mucha información sobre cómo hacer ajustes de zona horaria en PHP, pero no he encontrado una respuesta específicamente para lo que quiero hacer debido a todo el ruido.

Dado un tiempo en una zona horaria, quiero convertirlo al tiempo en otra zona horaria.

Esta es esencialmente lo que quiero hacer, pero necesito poder hacerlo usando solo las librerías PHP incorporadas, no la fecha PEAR.

Esto es lo que he estado haciendo, pero parece que siempre me da la compensación con respecto a GMT:

$los_angeles_time_zone = new DateTimeZone('America/Los_Angeles');
$hawaii_time_zone = new DateTimeZone('Pacific/Honolulu');

$date_time_los_angeles = new DateTime('2009-09-18 05:00:00', $los_angeles_time_zone);
printf("LA Time: %s<br/>", $date_time_los_angeles->format(DATE_ATOM));

$time_offset = $hawaii_time_zone->getOffset($date_time_los_angeles);
printf("Offset: %s<br/>", $time_offset);

Esta es la salida:

Hora de LA: 2009-09-18T05: 00: 00-07: 00
Offset: -36000

Esperaba 3 horas (10800 segundos). pero la cosa '-7: 00' me dice que está guardando todo en relación con GMT, lo que tal vez explica por qué me está dando la compensación "absoluta".

¿Cómo acabo de obtener la compensación entre las dos zonas horarias sin todo este GMT hoohah?

Gracias.

ACTUALIZAR:

Me di cuenta de que podía hacer esto y obtener lo que quería:

    $date_time_los_angeles = new DateTime('2009-09-18 05:00:00', $los_angeles_time_zone);
printf("LA Time: %s<br/>", $date_time_los_angeles->format(DATE_ATOM));

$date_time_hawaii = new DateTime('2009-09-18 05:00:00', $hawaii_time_zone);
printf("Hawaii Time: %s<br/>", $date_time_hawaii->format(DATE_ATOM));


$time_offset = $los_angeles_time_zone->getOffset($date_time_los_angeles) - $hawaii_time_zone->getOffset($date_time_los_angeles);
printf("Offset: %s<br/>", $time_offset);

Pero me resulta incómodo. ¿Alguien sabe una forma más limpia de hacerlo?

Respuestas a la pregunta(3)

Su respuesta a la pregunta