PHP TimeTime Timezones - Método Constructor vs Setter

Cuando se usa PHPDateTime clase y tratar de establecer unDateTimeZone Obtengo resultados diferentes dependiendo de cómo lo configuro: usando elDateTime::__construct o usando elDateTime::setTimezone método.

Aquí hay un ejemplo:

$date = '2014-08-01'

$dateTimeOne = new DateTime($date, new DateTimeZone('America/Los_Angeles'));
echo $dateTimeOne->format('Y-m-d\TH:i:sP'); 
// 2014-08-01T00:00:00-07:00

$dateTimeTwo = new DateTime($date);
$dateTimeTwo->setTimezone(new DateTimeZone('America/Los_Angeles'));
echo $dateTimeTwo->format('Y-m-d\TH:i:sP'); 
// 2014-07-31T17:00:00-07:00

Ver tambiénhttp://3v4l.org/LrZfM

He mirado a mi alrededor y no he encontrado una explicación adecuada que aborde estos comportamientos particulares que no sea el siguiente comentario en eldocumentos php: datetime.settimezone y el librophp | Guía del arquitecto para la programación de fecha y hora: Manejo de zonas horarias - DateTimeZone.

El comentario afirma que elDateTime::setTimezone El método cambiará la zona horaria para un punto particular en el tiempo (una marca de tiempo) pero la marca de tiempo de Unix permanece sin cambios.

Por otro lado elDateTime::__construct El parámetro DateTimeZone se usa para "sobrescribir la zona horaria predeterminada actual con una definida por el usuario"Capítulo 3: Manejo de zonas horarias - DateTimeZone.

Aparte de estos, no hay mucho sobre el tema (que pude encontrar).

Esto es lo que me gustaría saber:

Explicación adicional de estas dos formas de establecer las zonas horarias¿Cuándo debo usar elDateTime::__construct para establecer la zona horaria¿Cuándo debo usar elDateTime::setTimezone para establecer la zona horariaUn claro ejemplo del uso de uno frente al otro o cómo usarlos en conjunto

Respuestas a la pregunta(1)

Su respuesta a la pregunta