1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\VObject; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehlerclass TimezoneUtilTest extends \PHPUnit_Framework_TestCase { 6*a1a3b679SAndreas Boehler 7*a1a3b679SAndreas Boehler function setUp() { 8*a1a3b679SAndreas Boehler 9*a1a3b679SAndreas Boehler // clearning the tz cache 10*a1a3b679SAndreas Boehler TimezoneUtil::$map = null; 11*a1a3b679SAndreas Boehler 12*a1a3b679SAndreas Boehler } 13*a1a3b679SAndreas Boehler 14*a1a3b679SAndreas Boehler /** 15*a1a3b679SAndreas Boehler * @dataProvider getMapping 16*a1a3b679SAndreas Boehler */ 17*a1a3b679SAndreas Boehler function testCorrectTZ($timezoneName) { 18*a1a3b679SAndreas Boehler 19*a1a3b679SAndreas Boehler try { 20*a1a3b679SAndreas Boehler $tz = new \DateTimeZone($timezoneName); 21*a1a3b679SAndreas Boehler $this->assertInstanceOf('DateTimeZone', $tz); 22*a1a3b679SAndreas Boehler } catch (\Exception $e) { 23*a1a3b679SAndreas Boehler if (strpos($e->getMessage(), "Unknown or bad timezone")!==false) { 24*a1a3b679SAndreas Boehler $this->markTestSkipped($timezoneName . ' is not (yet) supported in this PHP version. Update pecl/timezonedb'); 25*a1a3b679SAndreas Boehler } else { 26*a1a3b679SAndreas Boehler throw $e; 27*a1a3b679SAndreas Boehler } 28*a1a3b679SAndreas Boehler 29*a1a3b679SAndreas Boehler } 30*a1a3b679SAndreas Boehler 31*a1a3b679SAndreas Boehler } 32*a1a3b679SAndreas Boehler 33*a1a3b679SAndreas Boehler function getMapping() { 34*a1a3b679SAndreas Boehler 35*a1a3b679SAndreas Boehler TimeZoneUtil::loadTzMaps(); 36*a1a3b679SAndreas Boehler 37*a1a3b679SAndreas Boehler // PHPUNit requires an array of arrays 38*a1a3b679SAndreas Boehler return array_map( 39*a1a3b679SAndreas Boehler function($value) { 40*a1a3b679SAndreas Boehler return array($value); 41*a1a3b679SAndreas Boehler }, 42*a1a3b679SAndreas Boehler TimeZoneUtil::$map 43*a1a3b679SAndreas Boehler ); 44*a1a3b679SAndreas Boehler 45*a1a3b679SAndreas Boehler } 46*a1a3b679SAndreas Boehler 47*a1a3b679SAndreas Boehler function testExchangeMap() { 48*a1a3b679SAndreas Boehler 49*a1a3b679SAndreas Boehler $vobj = <<<HI 50*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 51*a1a3b679SAndreas BoehlerMETHOD:REQUEST 52*a1a3b679SAndreas BoehlerVERSION:2.0 53*a1a3b679SAndreas BoehlerBEGIN:VTIMEZONE 54*a1a3b679SAndreas BoehlerTZID:foo 55*a1a3b679SAndreas BoehlerX-MICROSOFT-CDO-TZID:2 56*a1a3b679SAndreas BoehlerBEGIN:STANDARD 57*a1a3b679SAndreas BoehlerDTSTART:16010101T030000 58*a1a3b679SAndreas BoehlerTZOFFSETFROM:+0200 59*a1a3b679SAndreas BoehlerTZOFFSETTO:+0100 60*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU 61*a1a3b679SAndreas BoehlerEND:STANDARD 62*a1a3b679SAndreas BoehlerBEGIN:DAYLIGHT 63*a1a3b679SAndreas BoehlerDTSTART:16010101T020000 64*a1a3b679SAndreas BoehlerTZOFFSETFROM:+0100 65*a1a3b679SAndreas BoehlerTZOFFSETTO:+0200 66*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=-1SU 67*a1a3b679SAndreas BoehlerEND:DAYLIGHT 68*a1a3b679SAndreas BoehlerEND:VTIMEZONE 69*a1a3b679SAndreas BoehlerBEGIN:VEVENT 70*a1a3b679SAndreas BoehlerDTSTAMP:20120416T092149Z 71*a1a3b679SAndreas BoehlerDTSTART;TZID="foo":20120418T1 72*a1a3b679SAndreas Boehler 00000 73*a1a3b679SAndreas BoehlerSUMMARY:Begin Unterhaltsreinigung 74*a1a3b679SAndreas BoehlerUID:040000008200E00074C5B7101A82E0080000000010DA091DC31BCD01000000000000000 75*a1a3b679SAndreas Boehler 0100000008FECD2E607780649BE5A4C9EE6418CBC 76*a1a3b679SAndreas Boehler 000 77*a1a3b679SAndreas BoehlerEND:VEVENT 78*a1a3b679SAndreas BoehlerEND:VCALENDAR 79*a1a3b679SAndreas BoehlerHI; 80*a1a3b679SAndreas Boehler 81*a1a3b679SAndreas Boehler $tz = TimeZoneUtil::getTimeZone('foo', Reader::read($vobj)); 82*a1a3b679SAndreas Boehler $ex = new \DateTimeZone('Europe/Lisbon'); 83*a1a3b679SAndreas Boehler 84*a1a3b679SAndreas Boehler $this->assertEquals($ex->getName(), $tz->getName()); 85*a1a3b679SAndreas Boehler 86*a1a3b679SAndreas Boehler } 87*a1a3b679SAndreas Boehler 88*a1a3b679SAndreas Boehler function testWetherMicrosoftIsStillInsane() { 89*a1a3b679SAndreas Boehler 90*a1a3b679SAndreas Boehler $vobj = <<<HI 91*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 92*a1a3b679SAndreas BoehlerMETHOD:REQUEST 93*a1a3b679SAndreas BoehlerVERSION:2.0 94*a1a3b679SAndreas BoehlerBEGIN:VTIMEZONE 95*a1a3b679SAndreas BoehlerTZID:(GMT+01.00) Sarajevo/Warsaw/Zagreb 96*a1a3b679SAndreas BoehlerX-MICROSOFT-CDO-TZID:2 97*a1a3b679SAndreas BoehlerBEGIN:STANDARD 98*a1a3b679SAndreas BoehlerDTSTART:16010101T030000 99*a1a3b679SAndreas BoehlerTZOFFSETFROM:+0200 100*a1a3b679SAndreas BoehlerTZOFFSETTO:+0100 101*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU 102*a1a3b679SAndreas BoehlerEND:STANDARD 103*a1a3b679SAndreas BoehlerEND:VTIMEZONE 104*a1a3b679SAndreas BoehlerEND:VCALENDAR 105*a1a3b679SAndreas BoehlerHI; 106*a1a3b679SAndreas Boehler 107*a1a3b679SAndreas Boehler $tz = TimeZoneUtil::getTimeZone('(GMT+01.00) Sarajevo/Warsaw/Zagreb', Reader::read($vobj)); 108*a1a3b679SAndreas Boehler $ex = new \DateTimeZone('Europe/Sarajevo'); 109*a1a3b679SAndreas Boehler 110*a1a3b679SAndreas Boehler $this->assertEquals($ex->getName(), $tz->getName()); 111*a1a3b679SAndreas Boehler 112*a1a3b679SAndreas Boehler } 113*a1a3b679SAndreas Boehler 114*a1a3b679SAndreas Boehler function testUnknownExchangeId() { 115*a1a3b679SAndreas Boehler 116*a1a3b679SAndreas Boehler $vobj = <<<HI 117*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 118*a1a3b679SAndreas BoehlerMETHOD:REQUEST 119*a1a3b679SAndreas BoehlerVERSION:2.0 120*a1a3b679SAndreas BoehlerBEGIN:VTIMEZONE 121*a1a3b679SAndreas BoehlerTZID:foo 122*a1a3b679SAndreas BoehlerX-MICROSOFT-CDO-TZID:2000 123*a1a3b679SAndreas BoehlerBEGIN:STANDARD 124*a1a3b679SAndreas BoehlerDTSTART:16010101T030000 125*a1a3b679SAndreas BoehlerTZOFFSETFROM:+0200 126*a1a3b679SAndreas BoehlerTZOFFSETTO:+0100 127*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU 128*a1a3b679SAndreas BoehlerEND:STANDARD 129*a1a3b679SAndreas BoehlerBEGIN:DAYLIGHT 130*a1a3b679SAndreas BoehlerDTSTART:16010101T020000 131*a1a3b679SAndreas BoehlerTZOFFSETFROM:+0100 132*a1a3b679SAndreas BoehlerTZOFFSETTO:+0200 133*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=-1SU 134*a1a3b679SAndreas BoehlerEND:DAYLIGHT 135*a1a3b679SAndreas BoehlerEND:VTIMEZONE 136*a1a3b679SAndreas BoehlerBEGIN:VEVENT 137*a1a3b679SAndreas BoehlerDTSTAMP:20120416T092149Z 138*a1a3b679SAndreas BoehlerDTSTART;TZID="foo":20120418T1 139*a1a3b679SAndreas Boehler 00000 140*a1a3b679SAndreas BoehlerSUMMARY:Begin Unterhaltsreinigung 141*a1a3b679SAndreas BoehlerUID:040000008200E00074C5B7101A82E0080000000010DA091DC31BCD01000000000000000 142*a1a3b679SAndreas Boehler 0100000008FECD2E607780649BE5A4C9EE6418CBC 143*a1a3b679SAndreas BoehlerDTEND;TZID="Sarajevo, Skopje, Sofija, Vilnius, Warsaw, Zagreb":20120418T103 144*a1a3b679SAndreas Boehler 000 145*a1a3b679SAndreas BoehlerEND:VEVENT 146*a1a3b679SAndreas BoehlerEND:VCALENDAR 147*a1a3b679SAndreas BoehlerHI; 148*a1a3b679SAndreas Boehler 149*a1a3b679SAndreas Boehler $tz = TimeZoneUtil::getTimeZone('foo', Reader::read($vobj)); 150*a1a3b679SAndreas Boehler $ex = new \DateTimeZone(date_default_timezone_get()); 151*a1a3b679SAndreas Boehler $this->assertEquals($ex->getName(), $tz->getName()); 152*a1a3b679SAndreas Boehler 153*a1a3b679SAndreas Boehler } 154*a1a3b679SAndreas Boehler 155*a1a3b679SAndreas Boehler function testWindowsTimeZone() { 156*a1a3b679SAndreas Boehler 157*a1a3b679SAndreas Boehler $tz = TimeZoneUtil::getTimeZone('Eastern Standard Time'); 158*a1a3b679SAndreas Boehler $ex = new \DateTimeZone('America/New_York'); 159*a1a3b679SAndreas Boehler $this->assertEquals($ex->getName(), $tz->getName()); 160*a1a3b679SAndreas Boehler 161*a1a3b679SAndreas Boehler } 162*a1a3b679SAndreas Boehler 163*a1a3b679SAndreas Boehler /** 164*a1a3b679SAndreas Boehler * @dataProvider getPHPTimeZoneIdentifiers 165*a1a3b679SAndreas Boehler */ 166*a1a3b679SAndreas Boehler function testTimeZoneIdentifiers($tzid) { 167*a1a3b679SAndreas Boehler 168*a1a3b679SAndreas Boehler $tz = TimeZoneUtil::getTimeZone($tzid); 169*a1a3b679SAndreas Boehler $ex = new \DateTimeZone($tzid); 170*a1a3b679SAndreas Boehler 171*a1a3b679SAndreas Boehler $this->assertEquals($ex->getName(), $tz->getName()); 172*a1a3b679SAndreas Boehler 173*a1a3b679SAndreas Boehler } 174*a1a3b679SAndreas Boehler 175*a1a3b679SAndreas Boehler /** 176*a1a3b679SAndreas Boehler * @dataProvider getPHPTimeZoneBCIdentifiers 177*a1a3b679SAndreas Boehler */ 178*a1a3b679SAndreas Boehler function testTimeZoneBCIdentifiers($tzid) { 179*a1a3b679SAndreas Boehler 180*a1a3b679SAndreas Boehler $tz = TimeZoneUtil::getTimeZone($tzid); 181*a1a3b679SAndreas Boehler $ex = new \DateTimeZone($tzid); 182*a1a3b679SAndreas Boehler 183*a1a3b679SAndreas Boehler $this->assertEquals($ex->getName(), $tz->getName()); 184*a1a3b679SAndreas Boehler 185*a1a3b679SAndreas Boehler } 186*a1a3b679SAndreas Boehler 187*a1a3b679SAndreas Boehler function getPHPTimeZoneIdentifiers() { 188*a1a3b679SAndreas Boehler 189*a1a3b679SAndreas Boehler // PHPUNit requires an array of arrays 190*a1a3b679SAndreas Boehler return array_map( 191*a1a3b679SAndreas Boehler function($value) { 192*a1a3b679SAndreas Boehler return array($value); 193*a1a3b679SAndreas Boehler }, 194*a1a3b679SAndreas Boehler \DateTimeZone::listIdentifiers() 195*a1a3b679SAndreas Boehler ); 196*a1a3b679SAndreas Boehler 197*a1a3b679SAndreas Boehler } 198*a1a3b679SAndreas Boehler 199*a1a3b679SAndreas Boehler function getPHPTimeZoneBCIdentifiers() { 200*a1a3b679SAndreas Boehler 201*a1a3b679SAndreas Boehler // PHPUNit requires an array of arrays 202*a1a3b679SAndreas Boehler return array_map( 203*a1a3b679SAndreas Boehler function($value) { 204*a1a3b679SAndreas Boehler return array($value); 205*a1a3b679SAndreas Boehler }, 206*a1a3b679SAndreas Boehler TimeZoneUtil::getIdentifiersBC() 207*a1a3b679SAndreas Boehler ); 208*a1a3b679SAndreas Boehler 209*a1a3b679SAndreas Boehler } 210*a1a3b679SAndreas Boehler 211*a1a3b679SAndreas Boehler function testTimezoneOffset() { 212*a1a3b679SAndreas Boehler 213*a1a3b679SAndreas Boehler $tz = TimeZoneUtil::getTimeZone('GMT-0400', null, true); 214*a1a3b679SAndreas Boehler 215*a1a3b679SAndreas Boehler if (version_compare(PHP_VERSION, '5.5.10', '>=') && !defined('HHVM_VERSION')) { 216*a1a3b679SAndreas Boehler $ex = new \DateTimeZone('-04:00'); 217*a1a3b679SAndreas Boehler } else { 218*a1a3b679SAndreas Boehler $ex = new \DateTimeZone('Etc/GMT-4'); 219*a1a3b679SAndreas Boehler } 220*a1a3b679SAndreas Boehler $this->assertEquals($ex->getName(), $tz->getName()); 221*a1a3b679SAndreas Boehler 222*a1a3b679SAndreas Boehler } 223*a1a3b679SAndreas Boehler 224*a1a3b679SAndreas Boehler /** 225*a1a3b679SAndreas Boehler * @expectedException InvalidArgumentException 226*a1a3b679SAndreas Boehler */ 227*a1a3b679SAndreas Boehler function testTimezoneFail() { 228*a1a3b679SAndreas Boehler 229*a1a3b679SAndreas Boehler $tz = TimeZoneUtil::getTimeZone('FooBar', null, true); 230*a1a3b679SAndreas Boehler 231*a1a3b679SAndreas Boehler } 232*a1a3b679SAndreas Boehler 233*a1a3b679SAndreas Boehler function testFallBack() { 234*a1a3b679SAndreas Boehler 235*a1a3b679SAndreas Boehler $vobj = <<<HI 236*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 237*a1a3b679SAndreas BoehlerMETHOD:REQUEST 238*a1a3b679SAndreas BoehlerVERSION:2.0 239*a1a3b679SAndreas BoehlerBEGIN:VTIMEZONE 240*a1a3b679SAndreas BoehlerTZID:foo 241*a1a3b679SAndreas BoehlerBEGIN:STANDARD 242*a1a3b679SAndreas BoehlerDTSTART:16010101T030000 243*a1a3b679SAndreas BoehlerTZOFFSETFROM:+0200 244*a1a3b679SAndreas BoehlerTZOFFSETTO:+0100 245*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU 246*a1a3b679SAndreas BoehlerEND:STANDARD 247*a1a3b679SAndreas BoehlerBEGIN:DAYLIGHT 248*a1a3b679SAndreas BoehlerDTSTART:16010101T020000 249*a1a3b679SAndreas BoehlerTZOFFSETFROM:+0100 250*a1a3b679SAndreas BoehlerTZOFFSETTO:+0200 251*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=-1SU 252*a1a3b679SAndreas BoehlerEND:DAYLIGHT 253*a1a3b679SAndreas BoehlerEND:VTIMEZONE 254*a1a3b679SAndreas BoehlerBEGIN:VEVENT 255*a1a3b679SAndreas BoehlerDTSTAMP:20120416T092149Z 256*a1a3b679SAndreas BoehlerDTSTART;TZID="foo":20120418T1 257*a1a3b679SAndreas Boehler 00000 258*a1a3b679SAndreas BoehlerSUMMARY:Begin Unterhaltsreinigung 259*a1a3b679SAndreas BoehlerUID:040000008200E00074C5B7101A82E0080000000010DA091DC31BCD01000000000000000 260*a1a3b679SAndreas Boehler 0100000008FECD2E607780649BE5A4C9EE6418CBC 261*a1a3b679SAndreas Boehler 000 262*a1a3b679SAndreas BoehlerEND:VEVENT 263*a1a3b679SAndreas BoehlerEND:VCALENDAR 264*a1a3b679SAndreas BoehlerHI; 265*a1a3b679SAndreas Boehler 266*a1a3b679SAndreas Boehler $tz = TimeZoneUtil::getTimeZone('foo', Reader::read($vobj)); 267*a1a3b679SAndreas Boehler $ex = new \DateTimeZone(date_default_timezone_get()); 268*a1a3b679SAndreas Boehler $this->assertEquals($ex->getName(), $tz->getName()); 269*a1a3b679SAndreas Boehler 270*a1a3b679SAndreas Boehler } 271*a1a3b679SAndreas Boehler 272*a1a3b679SAndreas Boehler function testLjubljanaBug() { 273*a1a3b679SAndreas Boehler 274*a1a3b679SAndreas Boehler $vobj = <<<HI 275*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 276*a1a3b679SAndreas BoehlerCALSCALE:GREGORIAN 277*a1a3b679SAndreas BoehlerPRODID:-//Ximian//NONSGML Evolution Calendar//EN 278*a1a3b679SAndreas BoehlerVERSION:2.0 279*a1a3b679SAndreas BoehlerBEGIN:VTIMEZONE 280*a1a3b679SAndreas BoehlerTZID:/freeassociation.sourceforge.net/Tzfile/Europe/Ljubljana 281*a1a3b679SAndreas BoehlerX-LIC-LOCATION:Europe/Ljubljana 282*a1a3b679SAndreas BoehlerBEGIN:STANDARD 283*a1a3b679SAndreas BoehlerTZNAME:CET 284*a1a3b679SAndreas BoehlerDTSTART:19701028T030000 285*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 286*a1a3b679SAndreas BoehlerTZOFFSETFROM:+0200 287*a1a3b679SAndreas BoehlerTZOFFSETTO:+0100 288*a1a3b679SAndreas BoehlerEND:STANDARD 289*a1a3b679SAndreas BoehlerBEGIN:DAYLIGHT 290*a1a3b679SAndreas BoehlerTZNAME:CEST 291*a1a3b679SAndreas BoehlerDTSTART:19700325T020000 292*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 293*a1a3b679SAndreas BoehlerTZOFFSETFROM:+0100 294*a1a3b679SAndreas BoehlerTZOFFSETTO:+0200 295*a1a3b679SAndreas BoehlerEND:DAYLIGHT 296*a1a3b679SAndreas BoehlerEND:VTIMEZONE 297*a1a3b679SAndreas BoehlerBEGIN:VEVENT 298*a1a3b679SAndreas BoehlerUID:foo 299*a1a3b679SAndreas BoehlerDTSTART;TZID=/freeassociation.sourceforge.net/Tzfile/Europe/Ljubljana: 300*a1a3b679SAndreas Boehler 20121003T080000 301*a1a3b679SAndreas BoehlerDTEND;TZID=/freeassociation.sourceforge.net/Tzfile/Europe/Ljubljana: 302*a1a3b679SAndreas Boehler 20121003T083000 303*a1a3b679SAndreas BoehlerTRANSP:OPAQUE 304*a1a3b679SAndreas BoehlerSEQUENCE:2 305*a1a3b679SAndreas BoehlerSUMMARY:testing 306*a1a3b679SAndreas BoehlerCREATED:20121002T172613Z 307*a1a3b679SAndreas BoehlerLAST-MODIFIED:20121002T172613Z 308*a1a3b679SAndreas BoehlerEND:VEVENT 309*a1a3b679SAndreas BoehlerEND:VCALENDAR 310*a1a3b679SAndreas Boehler 311*a1a3b679SAndreas BoehlerHI; 312*a1a3b679SAndreas Boehler 313*a1a3b679SAndreas Boehler 314*a1a3b679SAndreas Boehler $tz = TimeZoneUtil::getTimeZone('/freeassociation.sourceforge.net/Tzfile/Europe/Ljubljana', Reader::read($vobj)); 315*a1a3b679SAndreas Boehler $ex = new \DateTimeZone('Europe/Ljubljana'); 316*a1a3b679SAndreas Boehler $this->assertEquals($ex->getName(), $tz->getName()); 317*a1a3b679SAndreas Boehler 318*a1a3b679SAndreas Boehler } 319*a1a3b679SAndreas Boehler 320*a1a3b679SAndreas Boehler function testWeirdSystemVLICs() { 321*a1a3b679SAndreas Boehler 322*a1a3b679SAndreas Boehler$vobj = <<<HI 323*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 324*a1a3b679SAndreas BoehlerCALSCALE:GREGORIAN 325*a1a3b679SAndreas BoehlerPRODID:-//Ximian//NONSGML Evolution Calendar//EN 326*a1a3b679SAndreas BoehlerVERSION:2.0 327*a1a3b679SAndreas BoehlerBEGIN:VTIMEZONE 328*a1a3b679SAndreas BoehlerTZID:/freeassociation.sourceforge.net/Tzfile/SystemV/EST5EDT 329*a1a3b679SAndreas BoehlerX-LIC-LOCATION:SystemV/EST5EDT 330*a1a3b679SAndreas BoehlerBEGIN:STANDARD 331*a1a3b679SAndreas BoehlerTZNAME:EST 332*a1a3b679SAndreas BoehlerDTSTART:19701104T020000 333*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11 334*a1a3b679SAndreas BoehlerTZOFFSETFROM:-0400 335*a1a3b679SAndreas BoehlerTZOFFSETTO:-0500 336*a1a3b679SAndreas BoehlerEND:STANDARD 337*a1a3b679SAndreas BoehlerBEGIN:DAYLIGHT 338*a1a3b679SAndreas BoehlerTZNAME:EDT 339*a1a3b679SAndreas BoehlerDTSTART:19700311T020000 340*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3 341*a1a3b679SAndreas BoehlerTZOFFSETFROM:-0500 342*a1a3b679SAndreas BoehlerTZOFFSETTO:-0400 343*a1a3b679SAndreas BoehlerEND:DAYLIGHT 344*a1a3b679SAndreas BoehlerEND:VTIMEZONE 345*a1a3b679SAndreas BoehlerBEGIN:VEVENT 346*a1a3b679SAndreas BoehlerUID:20121026T021107Z-6301-1000-1-0@chAir 347*a1a3b679SAndreas BoehlerDTSTAMP:20120905T172126Z 348*a1a3b679SAndreas BoehlerDTSTART;TZID=/freeassociation.sourceforge.net/Tzfile/SystemV/EST5EDT: 349*a1a3b679SAndreas Boehler 20121026T153000 350*a1a3b679SAndreas BoehlerDTEND;TZID=/freeassociation.sourceforge.net/Tzfile/SystemV/EST5EDT: 351*a1a3b679SAndreas Boehler 20121026T160000 352*a1a3b679SAndreas BoehlerTRANSP:OPAQUE 353*a1a3b679SAndreas BoehlerSEQUENCE:5 354*a1a3b679SAndreas BoehlerSUMMARY:pick up Ibby 355*a1a3b679SAndreas BoehlerCLASS:PUBLIC 356*a1a3b679SAndreas BoehlerCREATED:20121026T021108Z 357*a1a3b679SAndreas BoehlerLAST-MODIFIED:20121026T021118Z 358*a1a3b679SAndreas BoehlerX-EVOLUTION-MOVE-CALENDAR:1 359*a1a3b679SAndreas BoehlerEND:VEVENT 360*a1a3b679SAndreas BoehlerEND:VCALENDAR 361*a1a3b679SAndreas BoehlerHI; 362*a1a3b679SAndreas Boehler 363*a1a3b679SAndreas Boehler $tz = TimeZoneUtil::getTimeZone('/freeassociation.sourceforge.net/Tzfile/SystemV/EST5EDT', Reader::read($vobj), true); 364*a1a3b679SAndreas Boehler $ex = new \DateTimeZone('America/New_York'); 365*a1a3b679SAndreas Boehler $this->assertEquals($ex->getName(), $tz->getName()); 366*a1a3b679SAndreas Boehler 367*a1a3b679SAndreas Boehler } 368*a1a3b679SAndreas Boehler 369*a1a3b679SAndreas Boehler} 370