public function testTypecastTimezone()
{
$db = new Persistence_SQL($this->db->connection);
$m = new Model($db, 'event');
$dt = $m->addField('dt', ['type' => 'datetime', 'persist_timezone' => 'EEST']);
$d = $m->addField('d', ['type' => 'date', 'persist_timezone' => 'EEST']);
$t = $m->addField('t', ['type' => 'time', 'persist_timezone' => 'EEST']);
date_default_timezone_set('UTC');
$s = new \DateTime('Monday, 15-Aug-05 22:52:01 UTC');
$this->assertEquals('2005-08-16 00:52:01', $db->typecastSaveField($dt, $s));
$this->assertEquals('2005-08-15', $db->typecastSaveField($d, $s));
$this->assertEquals('22:52:01', $db->typecastSaveField($t, $s));
$this->assertEquals(new \DateTime('Monday, 15-Aug-05 22:52:01 UTC'), $db->typecastLoadField($dt, '2005-08-16 00:52:01'));
$this->assertEquals(new \DateTime('Monday, 15-Aug-05'), $db->typecastLoadField($d, '2005-08-15'));
$this->assertEquals(new \DateTime('22:52:01'), $db->typecastLoadField($t, '22:52:01'));
date_default_timezone_set('Asia/Tokyo');
$s = new \DateTime('Monday, 15-Aug-05 22:52:01 UTC');
$this->assertEquals('2005-08-16 00:52:01', $db->typecastSaveField($dt, $s));
$this->assertEquals('2005-08-15', $db->typecastSaveField($d, $s));
$this->assertEquals('22:52:01', $db->typecastSaveField($t, $s));
$this->assertEquals(new \DateTime('Monday, 15-Aug-05 22:52:01 UTC'), $db->typecastLoadField($dt, '2005-08-16 00:52:01'));
$this->assertEquals(new \DateTime('Monday, 15-Aug-05'), $db->typecastLoadField($d, '2005-08-15'));
$this->assertEquals(new \DateTime('22:52:01'), $db->typecastLoadField($t, '22:52:01'));
date_default_timezone_set('America/Los_Angeles');
$s = new \DateTime('Monday, 15-Aug-05 22:52:01');
// uses servers default timezone
$this->assertEquals('2005-08-16 07:52:01', $db->typecastSaveField($dt, $s));
$this->assertEquals('2005-08-15', $db->typecastSaveField($d, $s));
$this->assertEquals('22:52:01', $db->typecastSaveField($t, $s));
$this->assertEquals(new \DateTime('Monday, 15-Aug-05 22:52:01 America/Los_Angeles'), $db->typecastLoadField($dt, '2005-08-16 07:52:01'));
$this->assertEquals(new \DateTime('Monday, 15-Aug-05'), $db->typecastLoadField($d, '2005-08-15'));
$this->assertEquals(new \DateTime('22:52:01'), $db->typecastLoadField($t, '22:52:01'));
}